Files
mip/Data/BulkLoad/EFT/Nominations/plsql/amfr_journal.bdy

179 lines
5.0 KiB
Plaintext

CREATE OR REPLACE PACKAGE BODY amfr_journal IS
--
g_ause_id audit_sessions.ause_id%TYPE;
--
-- Private
--
FUNCTION get_session RETURN sessions.client_id%TYPE IS
--
l_return sessions.client_id%TYPE;
--
BEGIN
--
BEGIN
--
IF caco_security.g_client_id IS NOT NULL THEN
--
l_return := caco_security.g_client_id;
--
ELSE
--
l_return := wsgl.getclientid;
--
END IF;
--
EXCEPTION
WHEN OTHERS THEN
l_return := NULL;
END;
--
RETURN l_return;
--
END get_session;
--
PROCEDURE log_session ( p_session_id IN sessions.client_id%TYPE
, p_ause_id OUT audit_sessions.ause_id%TYPE
) IS
--
PRAGMA AUTONOMOUS_TRANSACTION;
--
l_ip_address sessions.ip_address%TYPE;
l_syus_id system_users.syus_id%TYPE;
l_syus_name audit_sessions.username%TYPE;
--
BEGIN
--
IF p_session_id IS NOT NULL THEN
--
BEGIN
--
SELECT ip_address
,syus_id
INTO l_ip_address
,l_syus_id
FROM sessions
WHERE sessions.client_id = p_session_id;
--
l_syus_name := caco_utilities.get_syus_name(l_syus_id);
--
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_ip_address := 'n/a';
l_syus_name := 'UNKNOWN';
END;
--
ELSE
--
l_ip_address := 'n/a';
l_syus_name := 'SYSTEM';
--
END IF;
--
INSERT INTO audit_sessions ( username
, session_id
, ip_address
)
VALUES ( l_syus_name
, NVL(p_session_id, 'SYSTEM')
, l_ip_address
)
RETURNING ause_id INTO p_ause_id;
--
COMMIT;
--
END log_session;
--
PROCEDURE init IS
--
l_session_id sessions.client_id%TYPE;
--
BEGIN
--
-- Check to see if we have already have an audit session, which we shouldn't have if we're initialising the package
--
IF g_ause_id IS NULL THEN
--
-- Check that there is a valid session ID, if not, we're a system process
--
l_session_id := get_session;
--
IF l_session_id IS NOT NULL THEN
--
-- Check for the existance of a session for this ID
--
FOR i IN ( SELECT ause.ause_id
FROM audit_sessions ause
WHERE ause.session_id = l_session_id
-- AND ause.username = caco_utilities.get_syus_name
AND ause.created_on BETWEEN SYSDATE -1 AND SYSDATE
ORDER BY ause.created_on desc) LOOP
--
g_ause_id := i.ause_id;
--
EXIT;
--
END LOOP;
--
END IF;
--
IF g_ause_id IS NULL THEN
--
log_session( l_session_id
, g_ause_id );
--
END IF;
--
END IF;
--
END init;
--
-- Public
--
PROCEDURE log_transaction ( p_operation_type audit_transactions.operation_type%TYPE
, p_operation_target audit_transactions.operation_target%TYPE
, p_old_values name_value_tab
, p_new_values name_value_tab) IS
--
-- Was going to be an autonomous transaction but only want to record successful transactions.
--
BEGIN
--
caco_debug.putline('AMFR_JOURNAL Session: '||g_ause_id|| ' Transaction on: '||p_operation_target);
--
INSERT INTO audit_transactions ( autr_id
, ause_ause_id
, operation_type
, operation_target
, old_values
, new_values
, created_on
, created_by
)
VALUES ( autr_seq.NEXTVAL
, g_ause_id
, p_operation_type
, SUBSTR(p_operation_target,1 ,30)
, p_old_values
, p_new_values
, SYSDATE
, caco_utilities.get_syus_id);
EXCEPTION
WHEN others THEN
cout_err.report_and_go( sqlcode, sqlerrm(sqlcode) );
--
END log_transaction;
--
FUNCTION about RETURN VARCHAR2 IS
BEGIN
RETURN(g_revision||CHR(10)||g_header);
END about;
--
BEGIN
/**
-- Initialization
*/
init;
--
END amfr_journal;
/