Programming/SQL

PL/SQL 트리거 생성

딩길딩길 2022. 3. 24. 15:49
반응형

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가 복잡할때 주로 사용

반응형