- 어떠한 테이블에 insert, update, delete이 일어났을 떄 연쇄하여 자동으로 동작시키고자 할 sql 문장이 있다면 트리거용한다.
- 이벤트 발생( insert, update, delete)시 자동으로 연쇄.
- 대상이 되는 테이블, 이벤트 종류, 시점을 정할 수 있다.
create or replace trigger 트리거이름
시점 이벤트 종류
on 테이블명 for each row
declare
begin
end;
/
- 시점에는 before, after가 올 수 있다.
- 이벤트에는 insert, update, delete 가 올 수 있다.
- 트리에서 사용할 수 있는 키워드
- :new - insert, update 가 된 새로운 행을 의미하는 변수
- :old - delete, update 되기 전 과정의 행을 의미하는 변수
-- dept에서 변경이 되면 dept_back에서도 변경이 일어나게
create table dept_back as select * from dept;
desc dept_back;
create or replace trigger trg_dept
after insert
on dept for each row
declare
begin
insert into dept_back values(:new.dno, :new.dname, :new.dloc);
end;
/
create or replace trigger trg_update_dept
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 dloc ='제주' where dname like '%개발%';
select * from dept;
rollback;
create or replace trigger trg_delete_dept
after delete
on dept for each row
declare
begin
delete dept_back where dno = :old.dno;
end;
/
insert into dept values(100, '테스트팀', '제주');
select * from dept_back;
delete dept where dno = 100;
select * from dept_back;
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);
commit;
select * from 상품;
desc 입고;
-- 입고 상품 번호가 입고가 되면 재고 수량을 수정하는 것.
--입고되는 만큼 증가됨.
create or replace trigger trg_insome
after insert
on 입고 for each row
declare
begin
update 상품 set 재고수량 = 재고수량 + :new.입고수량 where 상품.상품번호 = :new.상품번호;
end;
/
update 상품 set 재고수량 = 0;
delete 입고;
insert into 입고 values(1, 100, 5, sysdate);
select * from 입고;
select * from 상품;
insert into 입고 values(2,200, 10, sysdate);
select * from 입고;
select * from 상품;
insert into 입고 values(3, 100, 7, sysdate);
-- 입고 내역 삭제되는 만큼 재고도 감소
create or replace trigger trg_return
after delete
on 입고 for each row
declare
begin
update 상품 set 재고수량 = 재고수량 - :old.입고수량 where 상품.상품번호 = :old.상품번호;
end;
/
delete 입고 where 입고번호 = 3;
select * from 상품;
select * from 입고;
-- 입고 수정한 수량만큼 상품 수량도 변경
create or replace trigger trg_update_입고
after update
on 입고 for each row
declare
begin
update 상품 set 재고수량 = 재고수량 + (:new.입고수량 - :old.입고수량) where 상품번호 = :new.상품번호;
end;
/
show error;
select * from 입고;
update 입고 set 입고수량 = 5 where 입고번호 = 4;
select * from 입고;
select * from 상품;
update 입고 set 입고수량 = 5 where 입고번호 = 4;
select * from 입고;
select * from 상품;
update 입고 set 입고수량 = 40 where 입고번호 = 4;
'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글
웹 공부 사전 준비 (0) | 2024.07.03 |
---|---|
사용자 정의 함수(function)만드는 방법 (0) | 2024.06.25 |
PL/SQL (0) | 2024.06.24 |
index (0) | 2024.06.24 |
뷰(View) (0) | 2024.06.24 |