0. 기존트리거 조회
SELECT 'ALTER TRIGGER ' || TRIGGER_NAME || ' DISABLE;' AS SCRIPT_DISABLE
, 'ALTER TRIGGER ' || TRIGGER_NAME || ' ENABLE;' AS SCRIPT_ENABLE
, TRIGGER_NAME
, STATUS
, TRIGGER_TYPE
, TRIGGERING_EVENT
, TABLE_NAME
FROM USER_TRIGGERS;
1. 문서번호 채번함수
CREATE OR REPLACE FUNCTION GETSEQ RETURN VARCHAR2
IS
V_RTN VARCHAR(14);
BEGIN
V_RTN := TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS');
RETURN V_RTN;
END;
2. TEST용 테이블 생성
CREATE TABLE TAB1
( ID VARCHAR2(30)
, NAME VARCHAR2(30));
CREATE TABLE TAB2
( DOCNO VARCHAR2(30)
, ID VARCHAR2(30));
ALTER TABLE TAB2
ADD CONSTRAINT PK_TAB2 PRIMARY KEY (DOCNO);
3. TAB1 Trigger 생성(TAB1에 insert, delete시 TAB2에도 insert, delete)
CREATE OR REPLACE TRIGGER TR_INSERT
AFTER INSERT OR UPDATE OR DELETE ON TAB1
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF INSERTING THEN
INSERT INTO TAB2 VALUES (GETSEQ(), :NEW.ID);
-- 중복입력 테스트용
-- PRAGMA AUTONOMOUS_TRANSACTION;의 선언여부와는 상관없이
-- EXCEPTION 처리 구문이 있다면 TAB1에는 정상입력된다.
-- EXCEPTION 처리 구문이 없다면 TAB1에도 입력되지 않는다.
-- INSERT INTO TAB2 VALUES (0, :NEW.ID);
ELSIF UPDATING THEN
UPDATE TAB2 SET DOCNO = 'TEST';
ELSIF DELETING THEN
DELETE TAB2 WHERE TAB2.ID = :OLD.ID;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
4. TAB2 Trigger 생성(TAB2에 ID만 입력시 문서번호자동 자동입력)
CREATE OR REPLACE TRIGGER TR_INSERT2
BEFORE INSERT ON TAB2
FOR EACH ROW
BEGIN
:NEW.DOCNO := GETSEQ();
END;
5. TAB1에 INSERT
INSERT INTO TAB1 VALUES ('A', 'A모씨');
INSERT INTO TAB1 VALUES ('B', 'B모씨');
SELECT * FROM TAB1;
ID NAME
------------------------------ ------------------------------
A A모씨
B B모씨
SELECT * FROM TAB2;
DOCNO ID
------------------------------ ------------------------------
20130216131044 B
20130216131043 A
6. TAB1에 DELETE
DELETE FROM TAB1 WHERE ID = 'A';
SELECT * FROM TAB1;
ID NAME
------------------------------ ------------------------------
B B모씨
SELECT * FROM TAB2;
DOCNO ID
------------------------------ ------------------------------
20130216131044 B
7. TAB2에 INSERT
INSERT INTO TAB2 (ID) VALUES ('Z');
SELECT * FROM TAB1;
ID NAME
------------------------------ ------------------------------
B B모씨
SELECT * FROM TAB2;
DOCNO ID
------------------------------ ------------------------------
20130216131044 B
20130216131308 Z