-
oracle PL/SQL_트리거DataBase/oracle 2020. 4. 26. 16:27
트리거 :
데이터베이스가 미리 정해 놓은 조건을 만족하거나, 특정 이벤트가 발생하면 자동적으로 수행되는 동작
개발자가 호출하여 사용할 수 없다.(오라클에서 자동적으로 실행되는 PL/SQL 블록을 의미)
<트리거의 유형>
가장 많이 사용되는 트리거의 유형 : insert, update, delete의 결과로 실행되는 DML트리거
***구문형식
create [or replace] trigger 트리거이름
timming[before | after] event [insert | update | delete ] on 테이블명
begin
실행명령;
end;
1-1) 테이블을 생성 후 테이블에 insert가 될 때마다 msg를 출력하는 트리거를 만든다
123456789101112create table sample_dept (dept_id number,dept_name varchar2(15),loc varchar2(10));create or replace trigger print_msgafter insert on sample_deptbegindbms_output.put_line('부서가 추가되었습니다');end;/http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter1-2) insert를 실행하면 트리거의 문구가 출력된다
1insert into sample_dept values (10, '마케팅부', '서울');2-1) 테이블 생성
12345678910111213141516create 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 Scripterwarehouse에 입고수량을 변경하면 item테이블에도 반영되는 trigger 작성
2-2) warehouse에 우선 데이터를 insert해준다
12insert 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에서만 사용된다
-- 바인드 변수를 사용하여 적용할 수 있다
12345678create or replace trigger cnt_addafter insert on warehousefor each rowbeginend;/http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter2-4) warehouse에 delte가 발생하면 실행되는 trigger
-- old 선언은 delete에서 사용한다
12345678create or replace trigger cnt_subafter delete on warehousefor each rowbeginend;/http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter2-5) wherehouse에 update가 발생하면 실행되는 trigger
-- 기존의 있던 값을 지우고 update해주어야하기때문에 -로 기존값을 지우고 +로 새로운값을 주입한다...?!
12345678create or replace trigger cnt_updateafter update on warehousefor each rowbeginend;/http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter'DataBase > oracle' 카테고리의 다른 글
oracle 인덱스 (0) 2021.01.17 oracle 테이블스페이스 (0) 2020.04.26 oracle PL/SQL_패키지 (0) 2020.04.20 oracle PL/SQL_서브프로그램_함수 (0) 2020.04.20 oracle PL/SQL_서브프로그램_프로시저(procedure) (0) 2020.04.19