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; /