In this example I work on 2 tables EXAMPLE_DETAILS and EXAMPLE_DETAILS_HISTORY
The scenario is, whenever a row in EXAMPLE_DETAILS gets
updated or deleted, the old record should be sent to history table (EXAMPLE_DETAILS_HISTORY)
CREATE TABLE SCHEMA.EXAMPLE_DETAILS
(
DETAIL_ID INTEGER NOT NULL,
UNIQUE_ID INTEGER ,
TABLE_NAME VARCHAR2(30 BYTE),
EXAMPLE_DATE DATE,
EXAMPLE_REF INTEGER,
EXAMPLE_COMMENTS VARCHAR2(4000 BYTE),
CONSTRAINT DETAIL_ID_PK PRIMARY KEY (DETAIL_ID)
)
CREATE SEQUENCE SCHEMA.EXAMPLE_DETAILS_SEQ
START WITH 199
MAXVALUE 999999999999999999999999999
MINVALUE 0
NOCYCLE
NOCACHE
NOORDER;
CREATE OR REPLACE TRIGGER EXAMPLE_HISTORY_TRIGGER
BEFORE DELETE
ON EXAMPLE_DETAILS
FOR EACH ROW
BEGIN
INSERT INTO EXAMPLE_DETAILS_HISTORY (EXAMPLE_HISTORY_ID,
UNIQUE_ID,
TABLE_NAME,
HISTORY_DATE,
EXAMPLE_DATE,
EXAMPLE_ACTION_REF,
EXAMPLE_COMMENTS)
VALUES (EXAMPLE_HISTORY_SEQ.NEXTVAL,
:old.UNIQUE_ID,
:old.TABLE_NAME,
SYSDATE,
:EXAMPLE_DATE,
:EXAMPLE_REF,
:EXAMPLE_COMMENTS);
END;
/
CREATE OR REPLACE TRIGGER EXAMPLE_DETAILS_TRG BEFORE insert OR update ON EXAMPLE_DETAILS
FOR EACH ROW
BEGIN
:new.EXAMPLE_DATE := sysdate ;
END;
/
CREATE OR REPLACE TRIGGER EXAMPLE_DETAILS_UPDATETRG AFTER update ON EXAMPLE_DETAILS
FOR EACH ROW
BEGIN
IF :OLD.EXAMPLE_REF!=:NEW.EXAMPLE_REF OR :OLD.EXAMPLE_COMMENTS!=:NEW.EXAMPLE_COMMENTS
THEN
INSERT INTO EXAMPLE_DETAILS_HISTORY (EXAMPLE_HISTORY_ID,
UNIQUE_ID,
TABLE_NAME,
HISTORY_DATE,
EXAMPLE_DATE,
EXAMPLE_ACTION_REF,
EXAMPLE_COMMENTS)
VALUES ( EXAMPLE_HISTORY_SEQ.NEXTVAL,
:old.UNIQUE_ID,
:old.TABLE_NAME,
SYSDATE,
:old. EXAMPLE_DATE,
:old. EXAMPLE_ACTION_REF,
:old. EXAMPLE_COMMENTS);
END IF;
END;
/
********************************************************************************************
CREATE TABLE SCHEMA.EXAMPLE_DETAILS_HISTORY
(
EXAMPLE_HISTORY_ID INTEGER NOT NULL,
UNIQUE_ID INTEGER NOT NULL,
TABLE_NAME VARCHAR2(30 BYTE),
HISTORY_DATE DATE,
EXAMPLE_DATE DATE,
EXAMPLE_REF INTEGER,
EXAMPLE_COMMENTS VARCHAR2(4000 BYTE),
CONSTRAINT HISTORY_ID_PK PRIMARY KEY (EXAMPLE_HISTORY_ID)
)
CREATE SEQUENCE SCHEMA.EXAMPLE_DETAILS_HISTORY_SEQ
START WITH 199
MAXVALUE 999999999999999999999999999
MINVALUE 0
NOCYCLE
NOCACHE
NOORDER;