데이터베이스

28일차//[Oracle] Trigger

aesup 2021. 2. 22. 10:30
728x90

Trigger: 함수의 한종류
촉발시키다. 스스로 발생하다.
자동 호출되는 함수(CALL BACK)

Trigger()

Func()

Trigger()
    before after
                OLD NEW
        insert            0  
        delete      0   
        update      0   0
SET SERVEROUTPUT ON

CREATE OR REPLACE TRIGGER trigger_test
    BEFORE 
        UPDATE ON departments
        --테이블을 고치려고 할때(업데이트 하기전에) 자동 호출된다
        FOR EACH ROW

        BEGIN
          ---  DBMS_OUTPUT.PUT_LINE('트리거 호출');
           DBMS_OUTPUT.PUT_LINE('변경전 컬럼의값 '||  :OLD.department_name);
           DBMS_OUTPUT.PUT_LINE('변경후 컬럼의값 '||  :NEW.department_name);
        END;
        /

        UPDATE DEPARTMENTS
        SET department_name = '정보기술'
        WHERE department_id = 300;


        ROLLBACK;-- 이전으로 되돌린다



-- ROW 를 추가하는데 항상 평균 급여를 확인
CREATE OR REPLACE TRIGGER avg_trigger
    BEFORE -- AFTER T쓰면 추가된 이후에 출력된다
        INSERT OR UPDATE ON employees
        FOR EACH ROW


    DECLARE
        avg_sal NUMBER;
    BEGIN
        SELECT ROUND(AVG(salary),2) INTO avg_sal
        FROM employees;
        DBMS_OUTPUT.PUT_LINE('급여평균 '|| avg_sal);

    END;
    /
728x90