사용자 도구

사이트 도구


oracle:trigger

Trigger

Trigger 확인

--2 All Disabled Triggers:
SELECT *
  FROM dba_triggers
 WHERE STATUS!='ENABLED';

Compund Trigger

CREATE OR REPLACE TRIGGER 트리거이름
  FOR 트리거링 이벤트 ON 테이블명
    COMPOUND TRIGGER
  -- 전역 변수 선언
  g_global_variable VARCHAR2(10);
  TYPE TYPE_SALED_TAB IS TABLE OF SALED%ROWTYPE;
  G_SALED_TAB TYPE_SALED_TAB := TYPE_SALED_TAB();
  TYPE ty_bookings_hist IS TABLE OF bookings_hist%rowtype
    INDEX BY pls_integer;
  coll_bookings_hist ty_bookings_hist;
  ctr pls_integer := 0;
  BEFORE STATEMENT IS   --명령문 레벨 트리거 BEFORE
  BEGIN
    NULL; -- Do something here.
  END BEFORE STATEMENT;
 
  BEFORE EACH ROW IS  --행레벨 트리거 BEFORE
  BEGIN
    NULL; -- Do something here.
  END BEFORE EACH ROW;
 
  AFTER EACH ROW IS  --행레벨 트리거 AFTER
  BEGIN
    IF INSERTING OR UPDATING OR DELETING THEN
      G_SALED_TAB.EXTEND;
      NULL;
    END IF;
 
    ctr := ctr + 1;
    dbms_output.put_line('In after each row. booking_id='||:NEW.booking_id);
    coll_bookings_hist(ctr).booking_id := :NEW.booking_id;
    coll_bookings_hist(ctr).mod_dt := sysdate;
    coll_bookings_hist(ctr).mod_user := USER;
    coll_bookings_hist(ctr).old_booking_dt := :OLD.booking_dt;
    coll_bookings_hist(ctr).new_booking_dt := :NEW.booking_dt;
 
    NULL; -- Do something here.
  END AFTER EACH ROW;
 
  AFTER STATEMENT IS   --명령문 레벨 트리거 AFTER
  BEGIN
    IF G_SALED_TAB.COUNT() > 0 THEN
      FOR i IN G_SALED_TAB.first .. G_SALED_TAB.last LOOP
      END LOOP;
    END IF;
 
    forall counter IN 1..coll_bookings_hist.count()
      INSERT INTO bookings_hist
      VALUES coll_bookings_hist(counter);
    NULL; -- Do something here.
  END AFTER STATEMENT;
 
END <trigger-name>;
oracle/trigger.txt · 마지막으로 수정됨: 2025/04/15 10:05 저자 127.0.0.1