공룡이라는 ORACLE

Trigger

Jungsoomin :) 2020. 10. 23. 23:44

트리거는 이벤트 발생시 자동으로 동작하는 프로시져이다.

 

이벤트란 DML 문을 이야기한다.

 

트리거는 크게 AFTER 트리거와 BEFORE 트리거 로 나뉜다.

  • 행 레벨 트리거는 하나의 DML 문에 여러 로우가 변경될 시 변경된 로우마다 트리거를 작동(BEGIN ~ END) 한다.
  • 문장 레벨 트리거는 하나의 DML 문에 하나의 트리거 작동(BEGIN ~ END)만이 발생한다.

트리거의 구분은 for each row 로 구분한다.

 

:NEW 는 DML 작동시 새로운 값을 저장하는 임시의 테이블이다.

-- 트리거는 create trigger 로 생성한다.
-- 시그니처에 타이밍과 이벤트를 기재
-- for each row 는 행레벨 트리거(여러개의 로우를 변경 시 변경 마다 작동) 
-- for each row 생략시 로우 레벨 트리거 (한번의 dml에 한번의 트리거 작동)
-- begin - end 구문동일 
-- updating, deleting, inserting 등의 조건 부여 가능
-- 행 레벨 트리거 일시 :NEW 와 :OLD 로 컬럼 값 제어 가능
create or replace trigger trigger_sample1
    after insert
    on dept_original
    for each row
    begin
    if (inserting) then
    insert into dept_copyt values (
        :new.dno, :new.dname, :new.loc
    );
    end if;
    end;
    /

 

:OLD 는 DML 작동시 기존 값을 저장하는 임시 테이블이다.

    create or replace trigger trigger_sample2
    after delete
    on dept_original
    for each row
    begin
        if(deleting) then
        delete from dept_copyt
            where dno = :OLD.dno;
            end if;
    end;
    /

'공룡이라는 ORACLE' 카테고리의 다른 글

Procedure  (0) 2020.10.24
FUNCTION  (0) 2020.10.23
다중 insert 시 시퀀스 넘버가 PK 제약조건을 어긋내는 경우 해결방안.  (0) 2020.10.20
TopN  (0) 2020.10.06
간단한 백업  (0) 2020.10.03