【PL/SQL】トリガー

書いておいて忘れてた記事があったぞー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になるとまた作り方が違うからやっかい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください