For example, connect to the HR schema:
Connect hr/hr
This sequence will be used as a transaction number in the audit table.
Create Sequence Trans_Seq;
This is a simple table that tracks a transaction number, the user that attempted the update, and the system date.
Drop Table Track_Upd_Sal purge; Create Table Track_Upd_Sal ( Trans_Num NUMBER , Trans_User VARCHAR2(10) , Trans_Date DATE );
This procedure will be called by a trigger. Because it is autonomous, the Insert shown here will happen whether or not the update to Salary is committed or rolled back. (The 'Commit' shown in this procedure does not affect the transaction in the Employee table.)
Create or Replace Procedure p_Track_Upd_Sal
( User_In VARCHAR2
, Date_In DATE) is
Pragma Autonomous_Transaction;
Begin
Insert into Track_Upd_Sal values( Trans_Seq.NextVal
, User_In
, Date_In);
Commit;
End;
/
This trigger will call the above procedure if someone tries to update the salary in the Employees table.
Create or Replace Trigger Bef_Upd_Sal_Emp Before Update of Salary on Employees referencing new as new old as old for each row Begin p_Track_Upd_Sal ( User , SYSDATE); End; /
OK, the user 'HR' is now going to try this:
Update Employees Set Salary = 10000 Where Employee_Id = 197;
If we look, the salary has been updated, and the audit trail has a new record.
Select Employee_id , Salary From Employees Where Employee_Id = 197; Select * From Track_Upd_Sal;
But notice the salary change can still be rolled back.
Rollback;
Select Employee_id
, Salary
From Employees
Where Employee_Id = 197;
Tiny URL: http://tinyurl.com/autotran
No comments:
Post a Comment