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