PL/SQL 트리거 생성
1)
SQL> create table sal_change
2 (name varchar2(10), oldsal number, newsal number);
테이블이 생성되었습니다.
2)트리거생성
SQL> create or replace trigger sal_tri
2 after update of sal on st_player
3 for each row -> 건마다 수행하도록 하겠다는뜻
4 begin
5 insert into sal_change values
6 (:old.name, :old.sal, :new.sal); -> 키워드로 인식
7 end;
8 /
트리거가 생성되었습니다.
3)
SQL> select * from sal_change;
선택된 레코드가 없습니다.
SQL> update st_player set sal=500
2 where position_no=3;
2 행이 갱신되었습니다.
SQL> select * from sal_change;
NAME OLDSAL NEWSAL
-------------------- ---------- ----------
이승엽 315000000 500
최동수 73000000 500
4)
SQL> create table op_log
2 (opname varchar2(10), opdate date);
테이블이 생성되었습니다.
file afiedt.buf(이)가 기록되었습니다
1 create or replace trigger trig2
2 after update or delete on st_team
3 begin
4 if updating then
5 insert into op_log values
6 ('변경',sysdate);
7 elsif deleting then
8 insert into op_log values
9 ('삭제',sysdate);
10 end if;
11* end;
SQL> /
트리거가 생성되었습니다.
SQL> update st_team set team_nm ='test';
3 행이 갱신되었습니다.
SQL> select * from op_log;
OPNAME OPDATE
-------------------- --------
변경 07/04/13
for each row라는 옵션이 빠져있기 때문에 3번 update되었어도 1번만 일어남
updating이라는 키워드는 update가 일어날때
deleting이라는 키워는 delete가 일어날때
트리거는 속도문제로 많이 만들지는 않는다. DB가 복잡할때 주로 사용