Log all triggerable action: iinsert, update and delete to a log table : Triggerable Actions « Trigger « Oracle PL / SQL

Oracle PL / SQL
1. Aggregate Functions
2. Analytical Functions
3. Char Functions
4. Constraints
5. Conversion Functions
6. Cursor
7. Data Type
8. Date Timezone
9. Hierarchical Query
10. Index
11. Insert Delete Update
12. Large Objects
13. Numeric Math Functions
14. Object Oriented Database
15. PL SQL
16. Regular Expressions
17. Report Column Page
18. Result Set
19. Select Query
20. Sequence
21. SQL Plus
22. Stored Procedure Function
23. Subquery
24. System Packages
25. System Tables Views
26. Table
27. Table Joins
28. Trigger
29. User Previliege
30. View
31. XML
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Oracle PL / SQL » Trigger » Triggerable Actions 
Log all triggerable action: iinsert, update and delete to a log table



SQL> -- create demo table
SQL> create table Employee(
  2    ID                 VARCHAR2(BYTE)         NOT NULL,
  3    First_Name         VARCHAR2(10 BYTE),
  4    Last_Name          VARCHAR2(10 BYTE),
  5    Start_Date         DATE,
  6    End_Date           DATE,
  7    Salary             Number(8,2),
  8    City               VARCHAR2(10 BYTE),
  9    Description        VARCHAR2(15 BYTE)
 10  )
 11  /
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
  2               values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56'Toronto',  'Programmer')
  3  /
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
  2                values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78'Vancouver','Tester')
  3  /
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
  2                values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78'Vancouver','Tester')
  3  /
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
  2                values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78'Vancouver','Manager')
  3  /
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
  2                values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78'Vancouver','Tester')
  3  /
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
  2                values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester')
  3  /
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
  2                values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager')
  3  /
SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
  2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
  3  /
SQL>
SQL>
SQL>
SQL> -- display data in the table
SQL> select from Employee
  2  /

ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- ---------- ---------- --------- --------- ---------- ---------- ---------------
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester
SQL>
SQL>
SQL>
SQL> create table employees_copy as select from employee;
SQL>
SQL> create table employees_log(
  2    who      varchar2(30),
  3    action   varchar2(100),
  4    when     date );
SQL>
SQL>
SQL> create or replace trigger biud_employees_copy
  2    before insert or update or delete
  3       on employees_copy
  4  begin
  5    state_package.rows_changed := 0;
  6  end;
  7  /
SQL>
SQL> create trigger biudfer_employees_copy
  2    before insert or update or delete
  3       on employees_copy
  4    for each row
  5  declare
  6    l_action employees_log.action%type;
  7  begin
  8    if INSERTING then
  9      l_action := 'Insert';
 10    elsif UPDATING then
 11      l_action := 'Update';
 12    elsif DELETING then
 13      l_action := 'Delete';
 14    else
 15      raise_application_error-20001,
 16        'You should never ever get this error.' );
 17    end if;
 18
 19    state_package.rows_changed := state_package.rows_changed + 1;
 20
 21    if UPDATING'SALARY' ) then
 22      l_action := l_action || ' - ' ||
 23                  'Salary for id ' || :old.id ||
 24                  ' changed from ' || :old.salary ||
 25                  ' t' || :new.salary;
 26    end if;
 27
 28    insert into employees_log(
 29      who, action, when )
 30      values(
 31        user, l_action, sysdate );
 32  end;
 33  /
SQL>
SQL> create trigger aiud_employees_copy
  2    after insert or update or delete
  3     on employees_copy
  4  declare
  5    l_action employees_log.action%type;
  6  begin
  7    if INSERTING then
  8      l_action := state_package.rows_changed || ' were ' |'inserted';
  9    elsif UPDATING then
 10      l_action := state_package.rows_changed || ' were ' |'updated';
 11    elsif DELETING then
 12      l_action := state_package.rows_changed || ' were ' |'deleted';
 13    else
 14      raise_application_error-20001,
 15        'You should never ever get this error.' );
 16    end if;
 17
 18    insert into employees_log(
 19      who, action, when )
 20      values(
 21        user, l_action, sysdate );
 22  end;
 23  /
SQL>
SQL> update employees_copy set salary = salary * 0.95;
SQL>
SQL>
SQL> select from employees_log;

WHO                            ACTION                                                                                       WHEN
------------------------------ ---------------------------------------------------------------------------------------------------- ---------
JAVA2S                         Update - Salary for id 01 changed from 1234.56 to 1172.83                                    09-SEP-06
JAVA2S                         Update - Salary for id 02 changed from 6661.78 to 6328.69                                    09-SEP-06
JAVA2S                         Update - Salary for id 03 changed from 6544.78 to 6217.54                                    09-SEP-06
JAVA2S                         Update - Salary for id 04 changed from 2344.78 to 2227.54                                    09-SEP-06
JAVA2S                         Update - Salary for id 05 changed from 2334.78 to 2218.04                                    09-SEP-06
JAVA2S                         Update - Salary for id 06 changed from 4322.78 to 4106.64                                    09-SEP-06
JAVA2S                         Update - Salary for id 07 changed from 7897.78 to 7502.89                                    09-SEP-06
JAVA2S                         Update - Salary for id 08 changed from 1232.78 to 1171.14                                    09-SEP-06
JAVA2S                         were updated                                                                               09-SEP-06
SQL>
SQL>
SQL> drop table employees_copy;
SQL>
SQL> drop table employees_log;
SQL>
SQL> -- clean the table
SQL> drop table Employee
  2  /
SQL>
SQL>
SQL>
SQL>
           
       
Related examples in the same category
1. Check user name in a trigger
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.