書いておいて忘れてた記事があったぞーw
PL/SQL の トリガーについてだそうです(他人事)
テーブル構成
トリガー登録
CREATE OR REPLACE TRIGGER M_PRODUCT_TRIGGER BEFORE INSERT OR UPDATE OR DELETE ON M_PRODUCT FOR EACH ROW
BEGIN DBMS_OUTPUT.PUT_LINE('PRODUCT_ID:' || :NEW.PRODUCT_ID); IF (INSERTING) THEN DBMS_OUTPUT.PUT_LINE('登録'); -- 登録ユーザーと時間を設定 :NEW.PRODUCT_INSERT_USER := :NEW.PRODUCT_LAST_EDIT_USER; :NEW.PRODUCT_INSERT_DATE := SYSDATE; -- 更新ユーザーと時間を設定 :NEW.PRODUCT_UPDATE_USER := :NEW.PRODUCT_LAST_EDIT_USER; :NEW.PRODUCT_UPDATE_DATE := SYSDATE; END IF; IF (UPDATING) THEN DBMS_OUTPUT.PUT_LINE('更新'); -- 更新ユーザーと時間を設定 :NEW.PRODUCT_UPDATE_USER := :NEW.PRODUCT_LAST_EDIT_USER; :NEW.PRODUCT_UPDATE_DATE := SYSDATE; END IF; IF(:NEW.PRODUCT_DELETE_FLG = 1) THEN DBMS_OUTPUT.PUT_LINE('論理削除'); -- 削除ユーザーと時間を設定 :NEW.PRODUCT_DELETE_USER := :NEW.PRODUCT_LAST_EDIT_USER; :NEW.PRODUCT_DELETE_DATE := SYSDATE; END IF; IF (DELETING) THEN DBMS_OUTPUT.PUT_LINE('削除'); -- なんか処理があったらよかった! END IF;
END M_PRODUCT_TRIGGER;
/
INSERT
-- 新規登録
INSERT INTO M_PRODUCT( PRODUCT_ID, PRODUCT_NAME, PRODUCT_PRICE, PRODUCT_LAST_EDIT_USER, PRODUCT_DELETE_FLG)
VALUES( 1, 'TEST001', 100, 'oqiita', 0)
;
UPDATE
-- 更新処理
UPDATE M_PRODUCT SET PRODUCT_PRICE = PRODUCT_PRICE * 1.5, PRODUCT_LAST_EDIT_USER = 'oqiita2'
WHERE PRODUCT_PRICE >= 200
;
論理削除
-- 論理削除
UPDATE M_PRODUCT SET PRODUCT_DELETE_FLG = 1, PRODUCT_LAST_EDIT_USER = 'oqiita3'
WHERE PRODUCT_ID = 3
;
DELETE
-- 物理削除
DELETE FROM M_PRODUCT WHERE PRODUCT_ID = 4;
とくに処理が思い浮かばなかったので、ログがでるだけです!
まとめ
あれば便利なトリガー。MYSQLになるとまた作り方が違うからやっかい。