oracle PL/SQL_트리거
트리거 :
데이터베이스가 미리 정해 놓은 조건을 만족하거나, 특정 이벤트가 발생하면 자동적으로 수행되는 동작
개발자가 호출하여 사용할 수 없다.(오라클에서 자동적으로 실행되는 PL/SQL 블록을 의미)
<트리거의 유형>
가장 많이 사용되는 트리거의 유형 : insert, update, delete의 결과로 실행되는 DML트리거
***구문형식
create [or replace] trigger 트리거이름
timming[before | after] event [insert | update | delete ] on 테이블명
begin
실행명령;
end;
1-1) 테이블을 생성 후 테이블에 insert가 될 때마다 msg를 출력하는 트리거를 만든다
1
2
3
4
5
6
7
8
9
10
11
12
|
create table sample_dept (
dept_id number,
dept_name varchar2(15),
loc varchar2(10)
);
create or replace trigger print_msg
after insert on sample_dept
begin
dbms_output.put_line('부서가 추가되었습니다');
end;
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
1-2) insert를 실행하면 트리거의 문구가 출력된다
1
|
insert into sample_dept values (10, '마케팅부', '서울');
|

2-1) 테이블 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
create table item (
code char(6) primary key, --물품코드
name varchar2(15) not null, --물품이름
company varchar2(15) not null, --물품회사
price number(8), --물품가격
cnt number default 0 --수량
);
create table warehouse (
num number(6) primary key, --입고번호
code char(6) references item(code),
indate date default sysdate, --입고날짜
incnt number(6), --입고수량
inprice number(6), --단가
totalprice number(8) --총수량
);
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
warehouse에 입고수량을 변경하면 item테이블에도 반영되는 trigger 작성
2-2) warehouse에 우선 데이터를 insert해준다
1
2
|
insert into item(code, name, company, price) values ('c001', '에어컨', '삼성', 1000000);
insert into item(code, name, company, price) values ('c002', '선풍기', '엘지', 50000);
|
2-3) warehouse에 insert가 발생하면 실행되는 trigger
-- new 선언은 insert, update에서만 사용된다
-- 바인드 변수를 사용하여 적용할 수 있다
1
2
3
4
5
6
7
8
|
create or replace trigger cnt_add
after insert on warehouse
for each row
begin
end;
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
2-4) warehouse에 delte가 발생하면 실행되는 trigger
-- old 선언은 delete에서 사용한다
1
2
3
4
5
6
7
8
|
create or replace trigger cnt_sub
after delete on warehouse
for each row
begin
end;
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
2-5) wherehouse에 update가 발생하면 실행되는 trigger
-- 기존의 있던 값을 지우고 update해주어야하기때문에 -로 기존값을 지우고 +로 새로운값을 주입한다...?!
1
2
3
4
5
6
7
8
|
create or replace trigger cnt_update
after update on warehouse
for each row
begin
end;
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|