Urgent help needed on SChema Level Triggers [message #39030] |
Fri, 07 June 2002 12:50 |
Gurusubramanyam
Messages: 79 Registered: July 2001
|
Member |
|
|
Using the schema level triggers or using some other methods how to find out the data insertion , updation and deletion dates & times of specified tables tables
ie last inserted/modified/deleted date.very urgent. suggest a good solution for that..
thanks,
Prasad
|
|
|
Re: Urgent help needed on SChema Level Triggers [message #39032 is a reply to message #39030] |
Fri, 07 June 2002 14:16 |
|
Mahesh Rajendran
Messages: 10707 Registered: March 2002 Location: oracleDocoVille
|
Senior Member Account Moderator |
|
|
hello!
schema level trigger are used to monitor the DDL's only. like create/alter/drop a table or index
here is an example
SQL> create table event_table(
2 object_name varchar2(30),
3 object_type varchar2(20),
4 date_created date );
Table created.
SQL> create or replace trigger after_create_trg
2 after create
3 on mag.schema
4 begin
5 /* This trigger tracks the creation of table or index */
6 if sys.dictionary_obj_type='TABLE' OR
7 sys.dictionary_obj_type='INDEX'
8 then
9 insert into event_table values
10 (sys.dictionary_obj_name, sys.dictionary_obj_type, sysdate);
11 end if;
12 end;
13 /
Trigger created.
SQL> create table test_creation
2 (id number);
Table created.
SQL> select * from event_table;
OBJECT_NAME OBJECT_TYPE DATE_CREA
------------------------------ -------------------- ---------
TEST_CREATION TABLE 08-JUN-02
in order to track the data insertion, updation, deletion etc, you need to use the regular triggers.
here, for inserts only new values are inserted. for deletes only old values are inserted. for updates both old and new values are inserted
SQL> ed
Wrote file afiedt.buf
1 create table dept_back
2 (oldDEPTNO NUMBER(2),
3 oldDNAME VARCHAR2(14),
4 oldLOC VARCHAR2(13),
5 newDEPTNO NUMBER(2),
6 newDNAME VARCHAR2(14),
7* newLOC VARCHAR2(13))
8 /
Table created.
SQL> ed
Wrote file afiedt.buf
1* alter table dept_back add (stamp date)
SQL> /
Table altered.
SQL> ed
Wrote file afiedt.buf
1 create or replace trigger audit_dept
2 after insert or update or delete on dept
3 for each row
4 begin
5 if inserting then
6 insert into dept_back values
7 (null,null,null,:new.deptno,:new.dname,:new.loc,sysdate);
8 end if;
9 if deleting then
10 insert into dept_back values
11 (:old.deptno,:old.dname,:old.loc,null,null,null,sysdate);
12 end if;
13 if updating then
14 insert into dept_back values
15 (:old.deptno,:old.dname,:old.loc,:new.deptno,:new.dname,:new.loc,sysdate);
16 end if;
17* end;
SQL> /
Trigger created.
SQL> insert into dept values (50,'MIS','salem');
1 row created.
SQL> update dept set deptno=60 where loc='salem';
1 row updated.
SQL> delete from dept where deptno=60;
1 row deleted.
SQL> select * from dept_back;
OLDDEPTNO OLDDNAME OLDLOC NEWDEPTNO NEWDNAME NEWLOC STAMP
---------- -------------- ------------- ---------- -------------- ------------- ---------
50 MIS salem 08-JUN-02
50 MIS salem 60 MIS salem 08-JUN-02
60 MIS salem 08-JUN-02
6 rows selected.
SQL>
|
|
|