**트리거(trigger) : SQL에서의 이벤트 처리를 위한 것으로써
어떠한 테이블에
이벤트(insert, update, delete)가 일어날 때에
자동으로 동작하는 프로시저를 말합니다.
**트리거를 만드는 방법
create or replace trigger 트리거이름
시점 명령어 on 테이블이름 for each row
declare
변수명1 자료형
변수명2 자료형
begin
트리거가 해야할 명령어(들)
end;
**시점에는 before,after가 올 수 있다
**명령어에는 insert, update, delete가 올 수 있다
dept테이블에 insert가 된 후에 그 똑같은 레코드를 dept_back 테이블에 자동으로 insert하는 트리거를 만들어보고
dept에 insert해봅시다
:new
==> insert나 update가 된 새로운 행을 의미하는 키워드이다
:old
==> delete나, update되기전의 행을 의미하는 키워드이다
create or replace trigger trg_afterInsertDept
after insert on dept for each row
declare
begin
insert into dept_back values(:new.dno,:new.dname,:new.dloc);
end;
/
insert into dept values(50,'개발3팀','제주');
dept테이블에 수정이 되면 자동으로 dept_back의 내용도 수정하도록 트리거를 생성하고 dept테이블의 내용을 수정해본다
create or replace trigger trg_afterUpdateDept
after update on dept for each row
declare
begin
update dept_back set dname= :new.dname, dloc= :new.dloc where dno= :new.dno ;
end;
/
update dept set dname='영업3팀', dloc='서교동' where dno=50;
create or replace trigger trg_afterDeleteDept
after delete on dept for each row
declare
begin
delete dept_back where dno= :old.dno;
end;
/
delete dept where dno=50;
create table 상품(
상품번호 number primary key,
상품명 varchar2(30),
가격 number,
재고수량 number
);
create table 입고(
입고번호 number primary key,
상품번호 number references 상품(상품번호),
입고수량 number,
입고일 date
);
insert into 상품 values(100,'색종이',500,0);
insert into 상품 values(200,'삼각자',700,0);
insert into 상품 values(300,'딱풀',600,0);
create or replace trigger trg_afterUpdateProduct
after insert on 입고 for each row
declare
begin
update 상품 set 재고수량 = 재고수량 + :new.입고수량 where 상품번호= :new.상품번호;
end;
/
insert into 입고 values(1,100,10,sysdate);
insert into 입고 values(2,200,10,sysdate);
insert into 입고 values(3,300,50,sysdate);
insert into 입고 values(4,100,100,sysdate);
create or replace trigger trg_deleteProduct
after delete on 입고 for each row
declare
begin
update 상품 set 재고수량= 재고수량 - :old.입고수량 where 상품번호= :old.상품번호;
end;
/
delete 입고 where 입고번호=1;
create or replace trigger trg_updateProduct
after update on 입고 for each row
declare
begin
update 상품 set 재고수량= 재고수량-(:old.입고수량 - :new.입고수량) where 상품번호= :new.상품번호;
end;
/
insert into 입고 values(4, 300, 100, sysdate);
'프로그래밍 공부 정리 > database' 카테고리의 다른 글
PL/SQL: function (0) | 2021.12.02 |
---|---|
PL/SQL: procedure(프로시저) (0) | 2021.11.30 |
View의 장단점, View와 Table의 차이 (0) | 2021.11.29 |
Index(인덱스) (0) | 2021.11.28 |
View(뷰), System View(시스템 뷰) (0) | 2021.11.27 |