728x90
반응형
Trigger
특정이벤트, DDL, DML문이 실행되었을때,자동적으로 어떤 처리가 일어나도록 하는 데이터 베이스 객체
1. DML Trigger --어떤테이블 추가/생성 되었을때 실행
2. DDL Trigger
3. Logon /Logoff Trigger
예제)
급여내역이 변경될때 내역이 기록되도록 처리
create or replace trigger trig_salary_log
after --주 DML문 실행 전before / 실행후after 이 트리거를 작동
update on emp_test1 --특정테이블의 insert, update, delete문 실행시 trigger가 작동하도록 함
for each row
--문장 레벨 트리거 : (기본값) dml문당 한번 trigger가 실행
--행 레벨 트리거 : (for each row) dml문에서 적용되는 행마다 trigger 실행
begin
dbms_output.put_line('변경전 : ' || :old.salary);
dbms_output.put_line('변경후 : ' || :new.salary);
--로그테이블 기록
insert into emp_test1_salay_log
values(seq_emp_salary_log.nextval, :old.emp_id, :old.salary, :new.salary, default);
--trigger안에서는 TCL문 실행할 수 없음
--트리거 안의 dml문은 주 dml문과 트랜잭션을 함께 함
end;
/
--dml문 실행시 트리거 자동 실행
예제
create table emp_log
as
select 123 log_no, --number타입으로 생성됨
sysdate log_date,
emp_test1.*
from emp_test1
where 1=0; --테이블의 구조만 복사(어떤행도 나오지 않음)
select * from emp_log;
--테이블 제약조건 추가 및 변경
alter table emp_log
add constraint pk_emp_log_no primary key(log_no)
modify log_date default sysdate not null;
create sequence seq_emp_log;
create or replace trigger trig_emp_log
after
insert or update on emp_test1
for each row
begin
insert into emp_log
values(:new.emp_id, :new.emp_name, :new.emp_no, :new.email, :new.phone, :new.dept_code, :new.job_code, :new.sal_level
, :new.salary, :new.bonus, :new.manager_id, :new.hire_date, :new.quit_date, :new.quit_yn, seq_emp_log.nextval, default);
end;
/
반응형
'프로그래밍 > SQL' 카테고리의 다른 글
09.17(정규화 예제) (0) | 2020.09.17 |
---|---|
09.16(정규화) (0) | 2020.09.16 |
05.28(PL/SQL) (0) | 2020.05.28 |
05.27(VIEW, SEQUENCE) (0) | 2020.05.27 |
05.26(DCL과 TCL 명령어, DD) (0) | 2020.05.26 |