PL/SQL 6: 트리거 예제
–트리거(TRIGGER)
PL/SQL 문법을 사용.
1) 데이터베이스에서 미리 정해놓은 조건을 만족하면
자동으로 수행되는 이벤트
2) 사용하는 SQL (INSERT, UPDATE, DELTE)
예) 입고 => 재고 변경
출고 => 재고 변경
3) BEFORE (PRIMARY KEY), AFTER
4) 형식
CREATE [OR REPLACE] TRIGGER tri_name
BEFORE|AFTER (INSERT,UPDATE,DELETE) ON 테이블명
FOR EACH ROW
BEGIN
처리 문장
END;
/
5) 삭제
DROP TRIGGER tri_name
6) 수정
ALTER TRIGGER tri_name
7) 권한 부여 (conn system/tiger)
GRANT CREATE TRIGGER TO scott
GRANT ALTER ANY TRIGGER TO scott
GRANT DROP ANY TRIGGER TO scott
8) 원래 값은 올드, 새값을 포함하면 NEW
:OLD.컬럼명
:NEW.컬럼명
CREATE [OR REPLACE] TRIGGER trigger_name
timing
event1 [OR event2 OR event3…]
ON {table_name|view_name|SCHEMA|DATABASE}
[REFFERENCING OLD AD old | NEW as new]
[FOR EACH ROW [WHEN (condition) ] ]
trigger_body
timing: BEFORE, AFTER, INSTEAD OF(트리거가 특정 뷰에 대한 DML일 경우)
CREATE TABLE 상품(품번 NUMBER,항목 VARCHAR2(20),단가 NUMBER);
CREATE TABLE 입고(품번 NUMBER,수량 NUMBER,금액 NUMBER);
CREATE TABLE 판매(품번 NUMBER,수량 NUMBER,금액 NUMBER);
CREATE TABLE 재고(품번 NUMBER,수량 NUMBER,금액 NUMBER);
INSERT INTO 상품 VALUES(100,’새우깡’,900);
INSERT INTO 상품 VALUES(200,’감자깡’,900);
INSERT INTO 상품 VALUES(300,’맛동산’,1000);
INSERT INTO 입고 VALUES(100,10,9000);
INSERT INTO 입고 VALUES(200,10,9000);
INSERT INTO 입고 VALUES(300,10,10000);
INSERT INTO 재고 VALUES(100,10,9000);
INSERT INTO 재고 VALUES(200,10,9000);
INSERT INTO 재고 VALUES(300,10,10000);
COMMIT;
—————————————————————————–
–새우깡이 입고되었을 때
CREATE OR REPLACE TRIGGER j_trigger
AFTER INSERT ON 입고
FOR EACH ROW
BEGIN
UPDATE 재고 SET
수량=수량+:NEW.수량,
금액=금액+:NEW.금액
WHERE 품번=:NEW.품번;
END;
/
INSERT INTO 입고 VALUES(100,5,4500);
SELECT * FROM 재고;
————————————————————————————
–감자깡이 5개 출고되었을 때
CREATE OR REPLACE TRIGGER p_trigger
AFTER INSERT ON 판매
FOR EACH ROW
BEGIN
UPDATE 재고 SET
수량=수량-:NEW.수량,
금액=금액-:NEW.금액
WHERE 품번=:NEW.품번;
END;
/
INSERT INTO 판매 VALUES(200,5,4500);
SELECT * FROM 재고;