CREATE OR REPLACE TRIGGER M_HOGE_TRI BEFORE INSERT OR DELETE OR UPDATE ON M_HOGE REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE MODE_KBN VARCHAR2(1); -- I:挿入、U:更新、D:削除をセット MODE_NAME VARCHAR2(4); -- "新規"、"修正"、"削除"をセット BEGIN BEGIN -- 画面から更新の場合は、一時表に値がセットされるが、 -- DBから直接の場合は、一時表に値が無い状態となる。 -- 一時表であるため、値取得不可の場合がある。 SELECT MODE_SHORI INTO MODE_NAME FROM W_LOG; EXCEPTION WHEN NO_DATA_FOUND THEN MODE_NAME := '直DB'; -- 直接DBで入力 END; IF INSERTING THEN MODE_KBN := 'I'; -- I:挿入 ELSIF UPDATING THEN MODE_KBN := 'U'; -- U:更新 ELSIF DELETING THEN MODE_KBN := 'D'; -- D:削除 END IF; IF INSERTING OR UPDATING THEN -- 挿入 or 更新 内容をログに吐き出し INSERT INTO L_HOGE VALUES( L_HOGE_SEQ.NEXTVAL , MODE_KBN , MODE_NAME , SYSDATE , :new.CODE , :new.NAME ); ELSE -- 削除 内容をログに吐き出し INSERT INTO L_HANYO VALUES( L_HOGE_SEQ.NEXTVAL , MODE_KBN , MODE_NAME , SYSDATE , :old.CODE , :old.NAME ); END IF; END M_HOGE_TRI;