본문 바로가기
oracle

[ORACLE] TRIGGER 이용한 테이블 접근 확인

by 둥구리둥둥 2023. 5. 9.
728x90
반응형

CREATE TABLE TBL_ACS_CHK ( CHG_HIS_TYP_CD VARCHAR2(100), CHIS_DT DATE ) ; --  이력 테이블 생성

 

 CREATE OR REPLACE TRIGGER TR_TBL_CHK BEFORE -- 트리거 생성 

DELETE OR INSERT OR UPDATE OR SELECT 

ON SCOTT.EMP REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE V_CHANGETYPE TR_TBL_CHK.CHG_HIS_TYP_CD%TYPE;

 BEGIN IF INSERTING THEN V_CHANGETYPE :='I';

 ELSIF UPDATING THEN V_CHANGETYPE :='U';

 ELSIF DELETING THEN V_CHANGETYPE :='D';

 ELSIF SELECTING THEN V_CHANGETYPE :='S';

 

END IF;

 IF INSERTING 

    OR UPDATING THEN

INSERT

  INTO TBL_ACS_CHK ( CHG_HIS_TYP_CD, CHIS_DT, IP_ADRESS, USERNAME, EMPNO, ENAME, JOB , MGR , HIREDATE , SAL , COMM , DEPTNO )

VALUES ( V_CHANGETYPE,

               SYSDATE,

               (SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS')

                  FROM DUAL),

               (SELECT SYS_CONTEXT('USERENV', 'SESSION_USER')

                  FROM DUAL),

               :NEW.EMPNO,

               :NEW.ENAME,

               :NEW.JOB ,

               :NEW.MGR ,

               :NEW.HIREDATE ,

               :NEW.SAL ,

               :NEW.COMM ,

               :NEW.DEPTNO );

 ELSIF DELETING THEN 

INSERT

  INTO TBL_ACS_CHK ( CHG_HIS_TYP_CD, CHIS_DT, IP_ADRESS, USERNAME, EMPNO, ENAME, JOB , MGR , HIREDATE , SAL , COMM , DEPTNO )

VALUES ( V_CHANGETYPE,

               SYSDATE,

               (SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS')

                  FROM DUAL),

               (SELECT SYS_CONTEXT('USERENV', 'SESSION_USER')

                  FROM DUAL),

               :OLD.EMPNO,

               :OLD.ENAME,

               :OLD.JOB ,

               :OLD.MGR ,

               :OLD.HIREDATE ,

               :OLD.SAL ,

               :OLD.COMM ,

               :OLD.DEPTNO );

END IF;

 EXCEPTION 

       WHEN OTHERS THEN RAISE;

END TR_TBL_CHK;

/

 

 --테스트 트리거가 걸린 테이블에 INSERT, DELETE, UPDATE 작업을 하면 EMP 테이블에 이력 정보가 INSERT된다.

 

<TEST>

INSERT

  INTO EMP

VALUES (8000,LEE,'CHIEF',1,'2023-05-09',1000,NULL,10);

 DELETE EMP

 WHERE EMPNO=8000 ;

COMMIT;

 

SELECT *   FROM TBL_ACS_CHK; -- 이력테이블 조회로 내역 확인 

728x90
반응형