179 lines
5.0 KiB
Plaintext
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;
|
|
/
|