Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Trigger
 

Audit trigger

SQL> SQL> CREATE TABLE game_player   2  (player_id    NUMBER,   3   game_id      NUMBER,   4   group_number NUMBER,   5   marked       VARCHAR2(1) DEFAULT 'N',   6   pcmac        VARCHAR2(1) DEFAULT 'N',   7   score        NUMBER,   8   CONSTRAINT game_player_pk   9   PRIMARY KEY (player_id, game_id, group_number)); Table created. SQL> SQL> CREATE TABLE game_player_audit   2  (player_id    NUMBER,   3   game_id      NUMBER,   4   group_number NUMBER,   5   old_marked   VARCHAR2(1),   6   new_marked   VARCHAR2(1),   7   old_pcmac    VARCHAR2(1),   8   new_pcmac    VARCHAR2(1),   9   old_score    NUMBER,  10   new_score    NUMBER,  11   change_date  DATE,  12   operation    VARCHAR2(6)); Table created. SQL> SQL> CREATE OR REPLACE TRIGGER audit_game_players   2  AFTER INSERT OR UPDATE OR DELETE ON game_player   3  FOR EACH ROW   4  BEGIN   5    IF INSERTING THEN   6      INSERT INTO game_player_audit(player_id,game_id,group_number,   7                              new_marked,new_pcmac,new_score,   8                              change_date,operation)   9      VALUES(:new.player_id,:new.game_id,:new.group_number,  10             :new.marked,:new.pcmac,:new.score,  11             SYSDATE,'INSERT');  12    ELSIF UPDATING THEN  13      INSERT INTO game_player_audit(player_id,game_id,group_number,  14                                old_marked,new_marked,  15                                old_pcmac,new_pcmac,  16                              old_score,new_score,  17                              change_date,operation)  18      VALUES(:new.player_id,:new.game_id,:new.group_number,  19             :old.marked,:new.marked,  20             :old.pcmac,:new.pcmac,  21             :old.score,:new.score,  22             SYSDATE,'UPDATE');  23    ELSIF DELETING THEN  24      INSERT INTO game_player_audit(player_id,game_id,group_number,  25                              old_marked,old_pcmac,old_score,  26                              change_date,operation)  27      VALUES(:old.player_id,:old.game_id,:old.group_number,  28             :old.marked,:old.pcmac,:old.score,  29             SYSDATE,'DELETE');  30    END IF;  31  END;  32  / Trigger created. SQL> SQL> drop table game_player; Table dropped. SQL> SQL> drop table game_player_audit; Table dropped. SQL>