Instead Of
トリガーを作成する場合、SQL Developerでは、3つのDMLアクションすべてを同じトリガーに含めることができます。
結果のSQLは次のようになります。
CREATE OR REPLACE TRIGGER TRIGGER1
INSTEAD OF DELETE OR INSERT OR UPDATE ON PO_COSTED_BOM_V
BEGIN
NULL;
END;
私はInsert
とUpdate
を次のように組み合わせることができます:
CREATE OR REPLACE TRIGGER TRIGGER1
INSTEAD OF INSERT OR UPDATE OR DELETE ON PO_COSTED_BOM_V
BEGIN
UPDATE SRC_TBL SET CFG_VALUE = :NEW.CFG_VALUE
WHERE CFG_NAME = :NEW.CFG_NAME;
IF SQL%NOTFOUND THEN
INSERT INTO SRC_TBL (CFG_NAME, CFG_VALUE)
VALUES(:NEW.CFG_NAME, :NEW.CFG_VALUE);
END IF;
END;
Delete
ステートメントをトリガーに入れるのですか?どうも
From トリガー本体のコーディング
トリガーを起動したDML操作の検出
複数のタイプのDML操作がトリガーを起動できる場合(たとえば、ON INSERT OR DELETE OR UPDATE OF emp))、トリガー本体はトリガーを起動するステートメントのタイプを確認するための条件付き述語INSERTING、DELETING、およびUPDATING。
トリガー本体のコード内で、トリガーを起動したDML操作の種類に応じてコードのブロックを実行できます。
IF INSERTING THEN ... END IF; IF UPDATING THEN ... END IF; IF DELETING THEN ... END IF;
あなたの場合
...
if inserting then
INSERT INTO SRC_TBL (CFG_NAME, CFG_VALUE)
VALUES(:NEW.CFG_NAME, :NEW.CFG_VALUE);
elsif updating then
UPDATE SRC_TBL SET CFG_VALUE = :NEW.CFG_VALUE
WHERE CFG_NAME = :NEW.CFG_NAME;
elsif deleting then
...
END IF;