ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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를 출력하는 트리거를 만든다

    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(6primary key--물품코드
        name varchar2(15not null--물품이름
        company varchar2(15not null--물품회사
        price number(8), --물품가격
        cnt number default 0 --수량
    );
     
    create table warehouse (
        num number(6primary key--입고번호
        code char(6references 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
            update item set cnt = cnt + :new.incnt
            where code =:new.code;
    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
        update item set cnt = cnt - :old.incnt
        where code = :old.code;
    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
        update item set cnt = cnt +- :old.incnt +:new.incnt
        where code = :new.code;
    end;
    /
    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

    댓글

Designed by Tistory.