트리거는 이벤트 발생시 자동으로 동작하는 프로시져이다.
이벤트란 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 |