CREATE OR REPLACE PROCEDURE dp_xx_trgscript (
in_table_name VARCHAR2,
in_table_desc VARCHAR2
)
AUTHID CURRENT_USER
IS
/*
v_script1 VARCHAR2 (4000);
v_script2 VARCHAR2 (4000);
v_scritp3 VARCHAR2 (4000);
*/
v_oldvalue VARCHAR2 (4000);
v_changvalue VARCHAR2 (4000);
v_recordkey VARCHAR (1024);
BEGIN
FOR i IN (SELECT column_name, reckeyfg
FROM xx_triggtab_c
WHERE sequnumb = (SELECT sequnumb
FROM xx_triggtab_p
WHERE table_name = UPPER (in_table_name))
AND slctflag = 1
ORDER BY column_sequ)
LOOP
v_oldvalue :=
v_oldvalue
|| '||'
|| ''' ; '''
|| '||'
|| ''''
|| i.column_name
|| '= '''
|| '||'
|| ':old.'
|| i.column_name;
v_changvalue :=
v_changvalue
|| '||df_xx_checkval ('
|| ''''
|| i.column_name
|| ''''
|| ','
|| ':old.'
|| i.column_name
|| ', '
|| ':new.'
|| i.column_name
|| ')';
IF i.reckeyfg = 1
THEN
v_recordkey :=
v_recordkey
|| '||'
|| ''' ; '''
|| '||'
|| ''''
|| i.column_name
|| '= '''
|| '||'
|| ':old.'
|| i.column_name;
END IF;
END LOOP;
v_oldvalue := SUBSTR (v_oldvalue, 10);
v_changvalue := SUBSTR (v_changvalue, 3);
v_recordkey := SUBSTR (v_recordkey, 10);
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER '
|| 'XX_AUDIT_'
|| in_table_name
|| ' BEFORE UPDATE OR DELETE
ON '
|| in_table_name
|| ' FOR EACH ROW
DECLARE
oldvalue VARCHAR2 (4000) := NULL;
changedvalue VARCHAR2 (4000) := NULL;
v_table_name varchar2(30) := '
|| ''''
|| in_table_name
|| ''''
|| ';'
|| CHR (10)
|| 'v_table_desc varchar2(50) := '
|| ''''
|| in_table_desc
|| ''''
|| ';'
|| CHR (10)
|| ' v_action_type VARCHAR2 (1);
v_audit_id INTEGER;
v_sid NUMBER;
v_serial NUMBER;
v_schemaname VARCHAR2 (30);
v_username VARCHAR2 (30);
v_appusrid VARCHAR2 (30);
v_appuser VARCHAR2 (30);
v_osuser VARCHAR2 (30);
v_machine VARCHAR2 (64);
v_program VARCHAR2 (30);
v_client_ip VARCHAR2 (30);
BEGIN
IF UPDATING
THEN
v_action_type := ''U'';
ELSIF DELETING
THEN
v_action_type := ''D'';
END IF;
BEGIN
SELECT a.SID, a.serial#, a.schemaname, a.username, a.osuser,
a.machine, a.program, (SELECT emp_no
FROM sa_session
WHERE sid = a.SID AND serial# = a.serial#),
(SELECT user_name
FROM hr_emp
WHERE emp_no =
(SELECT emp_no
FROM sa_session
WHERE sid = a.SID AND serial# = a.serial#)),
SYS_CONTEXT (''USERENV'', ''IP_ADDRESS'')
INTO v_sid, v_serial, v_schemaname, v_username, v_osuser,
v_machine, v_program, v_appusrid,
v_appuser,
v_client_ip
FROM v$session a
WHERE a.audsid = SYS_CONTEXT (''USERENV'', ''SESSIONID'');
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
SELECT NVL (MAX (audit_id), 0) + 1
INTO v_audit_id
FROM xx_audit_log;
INSERT INTO xx_audit_log
(sysid, audit_id,
table_name, table_desc, action_type,
action_date, record_key, old_value,
changed_value, schema_name,
db_user_name, app_user_id, app_user_name, os_user_name, program_used,
logon_pc_name, logon_pc_ip, org_id, cre_by, cre_dt
)
VALUES (v_audit_id, v_audit_id,
v_table_name, v_table_desc, v_action_type,
SYSDATE, '
|| v_recordkey
|| ', '
|| v_oldvalue
|| ',
DECODE (v_action_type, ''D'', '''', '
|| v_changvalue
|| '), v_schemaname,
v_username, v_appusrid, v_appuser, v_osuser, v_program,
v_machine, v_client_ip, 1, v_appusrid, sysdate
);
END;';
/*
DBMS_OUTPUT.put_line ( v_script1
|| CHR (10)
|| v_script2
|| CHR (10)
|| v_scritp3
|| CHR (10)
|| 'END;'
);
*/
/*
EXECUTE IMMEDIATE v_script1
|| CHR (10)
|| v_script2
|| CHR (10)
|| v_scritp3
|| CHR (10)
|| 'END;';
*/
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20000,
'Program Unit Error...' || CHR (10) || SQLERRM
);
END;
/
in_table_name VARCHAR2,
in_table_desc VARCHAR2
)
AUTHID CURRENT_USER
IS
/*
v_script1 VARCHAR2 (4000);
v_script2 VARCHAR2 (4000);
v_scritp3 VARCHAR2 (4000);
*/
v_oldvalue VARCHAR2 (4000);
v_changvalue VARCHAR2 (4000);
v_recordkey VARCHAR (1024);
BEGIN
FOR i IN (SELECT column_name, reckeyfg
FROM xx_triggtab_c
WHERE sequnumb = (SELECT sequnumb
FROM xx_triggtab_p
WHERE table_name = UPPER (in_table_name))
AND slctflag = 1
ORDER BY column_sequ)
LOOP
v_oldvalue :=
v_oldvalue
|| '||'
|| ''' ; '''
|| '||'
|| ''''
|| i.column_name
|| '= '''
|| '||'
|| ':old.'
|| i.column_name;
v_changvalue :=
v_changvalue
|| '||df_xx_checkval ('
|| ''''
|| i.column_name
|| ''''
|| ','
|| ':old.'
|| i.column_name
|| ', '
|| ':new.'
|| i.column_name
|| ')';
IF i.reckeyfg = 1
THEN
v_recordkey :=
v_recordkey
|| '||'
|| ''' ; '''
|| '||'
|| ''''
|| i.column_name
|| '= '''
|| '||'
|| ':old.'
|| i.column_name;
END IF;
END LOOP;
v_oldvalue := SUBSTR (v_oldvalue, 10);
v_changvalue := SUBSTR (v_changvalue, 3);
v_recordkey := SUBSTR (v_recordkey, 10);
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER '
|| 'XX_AUDIT_'
|| in_table_name
|| ' BEFORE UPDATE OR DELETE
ON '
|| in_table_name
|| ' FOR EACH ROW
DECLARE
oldvalue VARCHAR2 (4000) := NULL;
changedvalue VARCHAR2 (4000) := NULL;
v_table_name varchar2(30) := '
|| ''''
|| in_table_name
|| ''''
|| ';'
|| CHR (10)
|| 'v_table_desc varchar2(50) := '
|| ''''
|| in_table_desc
|| ''''
|| ';'
|| CHR (10)
|| ' v_action_type VARCHAR2 (1);
v_audit_id INTEGER;
v_sid NUMBER;
v_serial NUMBER;
v_schemaname VARCHAR2 (30);
v_username VARCHAR2 (30);
v_appusrid VARCHAR2 (30);
v_appuser VARCHAR2 (30);
v_osuser VARCHAR2 (30);
v_machine VARCHAR2 (64);
v_program VARCHAR2 (30);
v_client_ip VARCHAR2 (30);
BEGIN
IF UPDATING
THEN
v_action_type := ''U'';
ELSIF DELETING
THEN
v_action_type := ''D'';
END IF;
BEGIN
SELECT a.SID, a.serial#, a.schemaname, a.username, a.osuser,
a.machine, a.program, (SELECT emp_no
FROM sa_session
WHERE sid = a.SID AND serial# = a.serial#),
(SELECT user_name
FROM hr_emp
WHERE emp_no =
(SELECT emp_no
FROM sa_session
WHERE sid = a.SID AND serial# = a.serial#)),
SYS_CONTEXT (''USERENV'', ''IP_ADDRESS'')
INTO v_sid, v_serial, v_schemaname, v_username, v_osuser,
v_machine, v_program, v_appusrid,
v_appuser,
v_client_ip
FROM v$session a
WHERE a.audsid = SYS_CONTEXT (''USERENV'', ''SESSIONID'');
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
SELECT NVL (MAX (audit_id), 0) + 1
INTO v_audit_id
FROM xx_audit_log;
INSERT INTO xx_audit_log
(sysid, audit_id,
table_name, table_desc, action_type,
action_date, record_key, old_value,
changed_value, schema_name,
db_user_name, app_user_id, app_user_name, os_user_name, program_used,
logon_pc_name, logon_pc_ip, org_id, cre_by, cre_dt
)
VALUES (v_audit_id, v_audit_id,
v_table_name, v_table_desc, v_action_type,
SYSDATE, '
|| v_recordkey
|| ', '
|| v_oldvalue
|| ',
DECODE (v_action_type, ''D'', '''', '
|| v_changvalue
|| '), v_schemaname,
v_username, v_appusrid, v_appuser, v_osuser, v_program,
v_machine, v_client_ip, 1, v_appusrid, sysdate
);
END;';
/*
DBMS_OUTPUT.put_line ( v_script1
|| CHR (10)
|| v_script2
|| CHR (10)
|| v_scritp3
|| CHR (10)
|| 'END;'
);
*/
/*
EXECUTE IMMEDIATE v_script1
|| CHR (10)
|| v_script2
|| CHR (10)
|| v_scritp3
|| CHR (10)
|| 'END;';
*/
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20000,
'Program Unit Error...' || CHR (10) || SQLERRM
);
END;
/

কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন