<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FTrigger%2FAuidt_Table</id>
		<title>Oracle PL/SQL Tutorial/Trigger/Auidt Table - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FTrigger%2FAuidt_Table"/>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Auidt_Table&amp;action=history"/>
		<updated>2026-05-24T23:26:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Auidt_Table&amp;diff=3556&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Auidt_Table&amp;diff=3556&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:45, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Auidt_Table&amp;diff=3557&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Auidt_Table&amp;diff=3557&amp;oldid=prev"/>
				<updated>2010-05-26T10:06:42Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Audit trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE game_player&lt;br /&gt;
  2  (player_id    NUMBER,&lt;br /&gt;
  3   game_id      NUMBER,&lt;br /&gt;
  4   group_number NUMBER,&lt;br /&gt;
  5   marked       VARCHAR2(1) DEFAULT &amp;quot;N&amp;quot;,&lt;br /&gt;
  6   pcmac        VARCHAR2(1) DEFAULT &amp;quot;N&amp;quot;,&lt;br /&gt;
  7   score        NUMBER,&lt;br /&gt;
  8   CONSTRAINT game_player_pk&lt;br /&gt;
  9   PRIMARY KEY (player_id, game_id, group_number));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE game_player_audit&lt;br /&gt;
  2  (player_id    NUMBER,&lt;br /&gt;
  3   game_id      NUMBER,&lt;br /&gt;
  4   group_number NUMBER,&lt;br /&gt;
  5   old_marked   VARCHAR2(1),&lt;br /&gt;
  6   new_marked   VARCHAR2(1),&lt;br /&gt;
  7   old_pcmac    VARCHAR2(1),&lt;br /&gt;
  8   new_pcmac    VARCHAR2(1),&lt;br /&gt;
  9   old_score    NUMBER,&lt;br /&gt;
 10   new_score    NUMBER,&lt;br /&gt;
 11   change_date  DATE,&lt;br /&gt;
 12   operation    VARCHAR2(6));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER audit_game_players&lt;br /&gt;
  2  AFTER INSERT OR UPDATE OR DELETE ON game_player&lt;br /&gt;
  3  FOR EACH ROW&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    IF INSERTING THEN&lt;br /&gt;
  6      INSERT INTO game_player_audit(player_id,game_id,group_number,&lt;br /&gt;
  7                              new_marked,new_pcmac,new_score,&lt;br /&gt;
  8                              change_date,operation)&lt;br /&gt;
  9      VALUES(:new.player_id,:new.game_id,:new.group_number,&lt;br /&gt;
 10             :new.marked,:new.pcmac,:new.score,&lt;br /&gt;
 11             SYSDATE,&amp;quot;INSERT&amp;quot;);&lt;br /&gt;
 12    ELSIF UPDATING THEN&lt;br /&gt;
 13      INSERT INTO game_player_audit(player_id,game_id,group_number,&lt;br /&gt;
 14                                old_marked,new_marked,&lt;br /&gt;
 15                                old_pcmac,new_pcmac,&lt;br /&gt;
 16                              old_score,new_score,&lt;br /&gt;
 17                              change_date,operation)&lt;br /&gt;
 18      VALUES(:new.player_id,:new.game_id,:new.group_number,&lt;br /&gt;
 19             :old.marked,:new.marked,&lt;br /&gt;
 20             :old.pcmac,:new.pcmac,&lt;br /&gt;
 21             :old.score,:new.score,&lt;br /&gt;
 22             SYSDATE,&amp;quot;UPDATE&amp;quot;);&lt;br /&gt;
 23    ELSIF DELETING THEN&lt;br /&gt;
 24      INSERT INTO game_player_audit(player_id,game_id,group_number,&lt;br /&gt;
 25                              old_marked,old_pcmac,old_score,&lt;br /&gt;
 26                              change_date,operation)&lt;br /&gt;
 27      VALUES(:old.player_id,:old.game_id,:old.group_number,&lt;br /&gt;
 28             :old.marked,:old.pcmac,:old.score,&lt;br /&gt;
 29             SYSDATE,&amp;quot;DELETE&amp;quot;);&lt;br /&gt;
 30    END IF;&lt;br /&gt;
 31  END;&lt;br /&gt;
 32  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table game_player;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table game_player_audit;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Logging All Operatins Using Autonumbering==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTable (Name VARCHAR(50) PRIMARY KEY NOT NULL, PhoneNo VARCHAR(15));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTableAudit(&lt;br /&gt;
  2  id INT PRIMARY KEY NOT NULL,&lt;br /&gt;
  3   Operation VARCHAR(10),&lt;br /&gt;
  4   RecordedOn DATE DEFAULT SysDate,&lt;br /&gt;
  5   OldName VARCHAR(50),&lt;br /&gt;
  6   NewName VARCHAR(50),&lt;br /&gt;
  7   OldPhone VARCHAR(15),&lt;br /&gt;
  8   NewPhone VARCHAR(15)&lt;br /&gt;
  9  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER myTableAuditTrigger&lt;br /&gt;
  2  AFTER INSERT OR DELETE OR UPDATE ON myTable&lt;br /&gt;
  3  FOR EACH ROW&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    IF INSERTING THEN&lt;br /&gt;
  6      INSERT INTO myTableAudit (Operation, NewName, NewPhone)VALUES (&amp;quot;Insert &amp;quot;, :NEW.Name, :NEW.PhoneNo);&lt;br /&gt;
  7    ELSIF DELETING THEN&lt;br /&gt;
  8      INSERT INTO myTableAudit (Operation, OldName, OldPhone)VALUES (&amp;quot;Delete &amp;quot;, :OLD.Name, :OLD.PhoneNo);&lt;br /&gt;
  9    ELSIF UPDATING THEN&lt;br /&gt;
 10      INSERT INTO myTableAudit (Operation, OldName, OldPhone, NewName, NewPhone)VALUES (&amp;quot;Update &amp;quot;, :OLD.Name, :OLD.PhoneNo, :NEW.Name, :NEW.PhoneNo);&lt;br /&gt;
 11    END IF;&lt;br /&gt;
 12  END;&lt;br /&gt;
 13  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTableAudit;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Logging All Operations==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTable (Name VARCHAR(50) PRIMARY KEY NOT NULL,&lt;br /&gt;
  2                       PhoneNo VARCHAR(15));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTableAudit&lt;br /&gt;
  2  (id INT PRIMARY KEY NOT NULL,&lt;br /&gt;
  3   Operation VARCHAR(10),&lt;br /&gt;
  4   RecordedOn DATE DEFAULT SysDate,&lt;br /&gt;
  5   OldName VARCHAR(50),&lt;br /&gt;
  6   NewName VARCHAR(50),&lt;br /&gt;
  7   OldPhone VARCHAR(15),&lt;br /&gt;
  8   NewPhone VARCHAR(15));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER myTableAuditTrigger&lt;br /&gt;
  2  AFTER INSERT OR DELETE OR UPDATE ON myTable&lt;br /&gt;
  3  FOR EACH ROW&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    IF INSERTING THEN&lt;br /&gt;
  6      INSERT INTO myTableAudit (id, Operation, NewName, NewPhone)&lt;br /&gt;
  7      VALUES (1, &amp;quot;Insert &amp;quot;, :NEW.Name, :NEW.PhoneNo);&lt;br /&gt;
  8    ELSIF DELETING THEN&lt;br /&gt;
  9      INSERT INTO myTableAudit (id, Operation, OldName, OldPhone)&lt;br /&gt;
 10      VALUES (1, &amp;quot;Delete &amp;quot;, :OLD.Name, :OLD.PhoneNo);&lt;br /&gt;
 11    ELSIF UPDATING THEN&lt;br /&gt;
 12      INSERT INTO myTableAudit (id, Operation,&lt;br /&gt;
 13                               OldName, OldPhone, NewName, NewPhone)&lt;br /&gt;
 14      VALUES (1, &amp;quot;Update &amp;quot;,&lt;br /&gt;
 15              :OLD.Name, :OLD.PhoneNo, :NEW.Name, :NEW.PhoneNo);&lt;br /&gt;
 16    END IF;&lt;br /&gt;
 17  END;&lt;br /&gt;
 18  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTableAudit;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Logging INSERT Operations==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTable (Name VARCHAR(50) PRIMARY KEY NOT NULL,&lt;br /&gt;
  2                       PhoneNo VARCHAR(15));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTableAudit&lt;br /&gt;
  2  (id INT PRIMARY KEY NOT NULL,&lt;br /&gt;
  3   Operation VARCHAR(10),&lt;br /&gt;
  4   RecordedOn DATE DEFAULT SysDate,&lt;br /&gt;
  5   OldName VARCHAR(50),&lt;br /&gt;
  6   NewName VARCHAR(50),&lt;br /&gt;
  7   OldPhone VARCHAR(15),&lt;br /&gt;
  8   NewPhone VARCHAR(15));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or replace TRIGGER myTableAuditTrigger&lt;br /&gt;
  2  AFTER INSERT ON myTable&lt;br /&gt;
  3  FOR EACH ROW&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    INSERT INTO myTableAudit (id, Operation, NewName, NewPhone)&lt;br /&gt;
  6    VALUES (1, &amp;quot;Insert &amp;quot;, :NEW.Name, :NEW.PhoneNo);&lt;br /&gt;
  7  END;&lt;br /&gt;
  8  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; show errors&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTableAudit;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Logging INSERT Operations With WHEN Conditions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTable (Name VARCHAR(50) PRIMARY KEY NOT NULL,&lt;br /&gt;
  2                       PhoneNo VARCHAR(15));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTableAudit&lt;br /&gt;
  2  (id INT PRIMARY KEY NOT NULL,&lt;br /&gt;
  3   Operation VARCHAR(10),&lt;br /&gt;
  4   RecordedOn DATE DEFAULT SysDate,&lt;br /&gt;
  5   OldName VARCHAR(50),&lt;br /&gt;
  6   NewName VARCHAR(50),&lt;br /&gt;
  7   OldPhone VARCHAR(15),&lt;br /&gt;
  8   NewPhone VARCHAR(15));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER myTableAuditTrigger&lt;br /&gt;
  2  AFTER INSERT ON myTable&lt;br /&gt;
  3  FOR EACH ROW&lt;br /&gt;
  4  WHEN (NEW.Name=&amp;quot;Peter&amp;quot;)&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    INSERT INTO myTableAudit (id, Operation, NewName, NewPhone)&lt;br /&gt;
  7    VALUES (1, &amp;quot;Insert &amp;quot;, :NEW.Name, :NEW.PhoneNo);&lt;br /&gt;
  8  END;&lt;br /&gt;
  9  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; show errors&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTableAudit;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Trigger for auditing==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE EMP(&lt;br /&gt;
  2      EMPNO NUMBER(4) NOT NULL,&lt;br /&gt;
  3      ENAME VARCHAR2(10),&lt;br /&gt;
  4      JOB VARCHAR2(9),&lt;br /&gt;
  5      MGR NUMBER(4),&lt;br /&gt;
  6      HIREDATE DATE,&lt;br /&gt;
  7      SAL NUMBER(7, 2),&lt;br /&gt;
  8      COMM NUMBER(7, 2),&lt;br /&gt;
  9      DEPTNO NUMBER(2)&lt;br /&gt;
 10  );&lt;br /&gt;
Table created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(2, &amp;quot;Jack&amp;quot;, &amp;quot;Tester&amp;quot;, 6,TO_DATE(&amp;quot;20-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1600, 300, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(3, &amp;quot;Wil&amp;quot;, &amp;quot;Tester&amp;quot;, 6,TO_DATE(&amp;quot;22-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 500, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(4, &amp;quot;Jane&amp;quot;, &amp;quot;Designer&amp;quot;, 9,TO_DATE(&amp;quot;2-APR-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2975, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(5, &amp;quot;Mary&amp;quot;, &amp;quot;Tester&amp;quot;, 6,TO_DATE(&amp;quot;28-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 1400, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(6, &amp;quot;Black&amp;quot;, &amp;quot;Designer&amp;quot;, 9,TO_DATE(&amp;quot;1-MAY-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2850, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7, &amp;quot;Chris&amp;quot;, &amp;quot;Designer&amp;quot;, 9,TO_DATE(&amp;quot;9-JUN-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2450, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(8, &amp;quot;Smart&amp;quot;, &amp;quot;Helper&amp;quot;, 4,TO_DATE(&amp;quot;09-DEC-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(9, &amp;quot;Peter&amp;quot;, &amp;quot;Manager&amp;quot;, NULL,TO_DATE(&amp;quot;17-NOV-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 5000, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(10, &amp;quot;Take&amp;quot;, &amp;quot;Tester&amp;quot;, 6,TO_DATE(&amp;quot;8-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1500, 0, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(13, &amp;quot;Fake&amp;quot;, &amp;quot;Helper&amp;quot;, 4,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE DEPT(&lt;br /&gt;
  2      DEPTNO NUMBER(2),&lt;br /&gt;
  3      DNAME VARCHAR2(14),&lt;br /&gt;
  4      LOC VARCHAR2(13)&lt;br /&gt;
  5  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (10, &amp;quot;ACCOUNTING&amp;quot;, &amp;quot;NEW YORK&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (20, &amp;quot;RESEARCH&amp;quot;, &amp;quot;DALLAS&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (30, &amp;quot;SALES&amp;quot;, &amp;quot;CHICAGO&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (40, &amp;quot;OPERATIONS&amp;quot;, &amp;quot;BOSTON&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE DEPT$AUDIT (&lt;br /&gt;
  2      DEPTNO       NUMBER,&lt;br /&gt;
  3      DNAME        VARCHAR2(14 byte),&lt;br /&gt;
  4      LOC          VARCHAR2(13 byte),&lt;br /&gt;
  5      CHANGE_TYPE  VARCHAR2(1 byte),&lt;br /&gt;
  6      CHANGED_BY   VARCHAR2(30 byte),&lt;br /&gt;
  7      CHANGED_TIME DATE&lt;br /&gt;
  8  );&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER auditDEPTAR AFTER&lt;br /&gt;
  2  INSERT OR UPDATE OR DELETE ON DEPT FOR EACH ROW&lt;br /&gt;
  3  declare&lt;br /&gt;
  4  my DEPT$audit%ROWTYPE;&lt;br /&gt;
  5  begin&lt;br /&gt;
  6      if inserting then my.change_type := &amp;quot;I&amp;quot;;&lt;br /&gt;
  7      elsif updating then my.change_type :=&amp;quot;U&amp;quot;;&lt;br /&gt;
  8      else my.change_type := &amp;quot;D&amp;quot;;&lt;br /&gt;
  9      end if;&lt;br /&gt;
 10&lt;br /&gt;
 11      my.changed_by := user;&lt;br /&gt;
 12      my.changed_time := sysdate;&lt;br /&gt;
 13&lt;br /&gt;
 14      case my.change_type&lt;br /&gt;
 15      when &amp;quot;I&amp;quot; then&lt;br /&gt;
 16         my.DEPTNO := :new.DEPTNO;&lt;br /&gt;
 17         my.DNAME := :new.DNAME;&lt;br /&gt;
 18         my.LOC := :new.LOC;&lt;br /&gt;
 19      else&lt;br /&gt;
 20         my.DEPTNO := :old.DEPTNO;&lt;br /&gt;
 21         my.DNAME := :old.DNAME;&lt;br /&gt;
 22         my.LOC := :old.LOC;&lt;br /&gt;
 23      end case;&lt;br /&gt;
 24&lt;br /&gt;
 25      insert into DEPT$audit values my;&lt;br /&gt;
 26  end;&lt;br /&gt;
 27  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table dept;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Use audit table in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table myaudit(&lt;br /&gt;
  2     id VARCHAR2(4 BYTE)         NOT NULL,&lt;br /&gt;
  3     old_value VARCHAR2(40 BYTE),&lt;br /&gt;
  4     new_value VARCHAR2(40 BYTE)&lt;br /&gt;
  5  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- create demo table&lt;br /&gt;
SQL&amp;gt; create table Employee(&lt;br /&gt;
  2    ID                 VARCHAR2(4 BYTE)         NOT NULL,&lt;br /&gt;
  3    First_Name         VARCHAR2(10 BYTE),&lt;br /&gt;
  4    Last_Name          VARCHAR2(10 BYTE),&lt;br /&gt;
  5    Start_Date         DATE,&lt;br /&gt;
  6    End_Date           DATE,&lt;br /&gt;
  7    Salary             Number(8,2),&lt;br /&gt;
  8    City               VARCHAR2(10 BYTE),&lt;br /&gt;
  9    Description        VARCHAR2(15 BYTE)&lt;br /&gt;
 10  )&lt;br /&gt;
 11  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- prepare data&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2               values (&amp;quot;01&amp;quot;,&amp;quot;Jason&amp;quot;,    &amp;quot;Martin&amp;quot;,  to_date(&amp;quot;19960725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20060725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1234.56, &amp;quot;Toronto&amp;quot;,  &amp;quot;Programmer&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;02&amp;quot;,&amp;quot;Alison&amp;quot;,   &amp;quot;Mathews&amp;quot;, to_date(&amp;quot;19760321&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19860221&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6661.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;03&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Smith&amp;quot;,   to_date(&amp;quot;19781212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19900315&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6544.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;04&amp;quot;,&amp;quot;Celia&amp;quot;,    &amp;quot;Rice&amp;quot;,    to_date(&amp;quot;19821024&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19990421&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2344.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;05&amp;quot;,&amp;quot;Robert&amp;quot;,   &amp;quot;Black&amp;quot;,   to_date(&amp;quot;19840115&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980808&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;06&amp;quot;,&amp;quot;Linda&amp;quot;,    &amp;quot;Green&amp;quot;,   to_date(&amp;quot;19870730&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19960104&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 4322.78,&amp;quot;New York&amp;quot;,  &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;07&amp;quot;,&amp;quot;David&amp;quot;,    &amp;quot;Larry&amp;quot;,   to_date(&amp;quot;19901231&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 7897.78,&amp;quot;New York&amp;quot;,  &amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;08&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Cat&amp;quot;,     to_date(&amp;quot;19960917&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20020415&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1232.78,&amp;quot;Vancouver&amp;quot;, &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- display data in the table&lt;br /&gt;
SQL&amp;gt; select * from Employee&lt;br /&gt;
  2  /&lt;br /&gt;
ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION&lt;br /&gt;
---- ---------- ---------- --------- --------- ---------- ---------- ---------------&lt;br /&gt;
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer&lt;br /&gt;
02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester&lt;br /&gt;
03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester&lt;br /&gt;
04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager&lt;br /&gt;
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester&lt;br /&gt;
06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester&lt;br /&gt;
07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager&lt;br /&gt;
08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester&lt;br /&gt;
8 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER before_employee_salary_update&lt;br /&gt;
  2  BEFORE UPDATE OF salary&lt;br /&gt;
  3  ON employee&lt;br /&gt;
  4  FOR EACH ROW WHEN (new.salary &amp;lt; old.salary * 0.75)&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    dbms_output.put_line(&amp;quot;id = &amp;quot; || :old.id);&lt;br /&gt;
  7    dbms_output.put_line(&amp;quot;Old salary = &amp;quot; || :old.salary);&lt;br /&gt;
  8    dbms_output.put_line(&amp;quot;New salary = &amp;quot; || :new.salary);&lt;br /&gt;
  9    dbms_output.put_line(&amp;quot;The salary reduction is more than 25%&amp;quot;);&lt;br /&gt;
 10&lt;br /&gt;
 11  INSERT INTO Myaudit (&lt;br /&gt;
 12    id, old_value, new_value&lt;br /&gt;
 13  ) VALUES (&lt;br /&gt;
 14    :old.id, :old.salary, :new.salary&lt;br /&gt;
 15  );&lt;br /&gt;
 16  END before_employee_salary_update;&lt;br /&gt;
 17  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; update employee set salary = 0;&lt;br /&gt;
8 rows updated.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select * from employee;&lt;br /&gt;
ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION&lt;br /&gt;
---- ---------- ---------- --------- --------- ---------- ---------- ---------------&lt;br /&gt;
01   Jason      Martin     25-JUL-96 25-JUL-06          0 Toronto    Programmer&lt;br /&gt;
02   Alison     Mathews    21-MAR-76 21-FEB-86          0 Vancouver  Tester&lt;br /&gt;
03   James      Smith      12-DEC-78 15-MAR-90          0 Vancouver  Tester&lt;br /&gt;
04   Celia      Rice       24-OCT-82 21-APR-99          0 Vancouver  Manager&lt;br /&gt;
05   Robert     Black      15-JAN-84 08-AUG-98          0 Vancouver  Tester&lt;br /&gt;
06   Linda      Green      30-JUL-87 04-JAN-96          0 New York   Tester&lt;br /&gt;
07   David      Larry      31-DEC-90 12-FEB-98          0 New York   Manager&lt;br /&gt;
08   James      Cat        17-SEP-96 15-APR-02          0 Vancouver  Tester&lt;br /&gt;
8 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select * from myaudit;&lt;br /&gt;
ID   OLD_VALUE                                NEW_VALUE&lt;br /&gt;
---- ---------------------------------------- ----------------------------------------&lt;br /&gt;
01   1234.56                                  0&lt;br /&gt;
02   6661.78                                  0&lt;br /&gt;
03   6544.78                                  0&lt;br /&gt;
04   2344.78                                  0&lt;br /&gt;
05   2334.78                                  0&lt;br /&gt;
06   4322.78                                  0&lt;br /&gt;
07   7897.78                                  0&lt;br /&gt;
08   1232.78                                  0&lt;br /&gt;
8 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- clean the table&lt;br /&gt;
SQL&amp;gt; drop table Employee&lt;br /&gt;
  2  /&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myaudit;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>