VIEW
にStatementトリガーを作成できます(Rowトリガーは作成できません)。ステートメントがOracleのVIEWのトリガー
ビューでFOR EACH ROW
オプションを指定しないでINSTEAD OF
トリガーを作成すると、Oracleはトリガーを各行ごとに発生させます。例えば
、以下のコード:TEST_TABLE
出力(代わりTEST_VIEW
の)にAFTER
として
ROW TRIGGER: one
STATEMENT TRIGGER.
ROW TRIGGER: two
STATEMENT TRIGGER.
ROW TRIGGER: three
STATEMENT TRIGGER.
Iがトリガー
TEST_VIEW_TRG1
を生成
とTEST_VIEW_TRG2
:
CREATE TABLE TEST_TABLE (
MY_DATA VARCHAR(30)
);
INSERT INTO TEST_TABLE(MY_DATA) VALUES('one');
INSERT INTO TEST_TABLE(MY_DATA) VALUES('two');
INSERT INTO TEST_TABLE(MY_DATA) VALUES('three');
CREATE OR REPLACE VIEW TEST_VIEW AS
SELECT * FROM TEST_TABLE;
CREATE OR REPLACE TRIGGER TEST_VIEW_TRG1
INSTEAD OF DELETE ON TEST_VIEW
DECLARE
BEGIN
Dbms_Output.Put_Line('STATEMENT TRIGGER.');
END;
/
CREATE OR REPLACE TRIGGER TEST_VIEW_TRG2
INSTEAD OF DELETE ON TEST_VIEW FOR EACH ROW
DECLARE
BEGIN
Dbms_Output.Put_Line('ROW TRIGGER: '||:OLD.MY_DATA);
END;
/
DELETE FROM TEST_VIEW;
は、以下の出力を生成します
ROW TRIGGER: one
ROW TRIGGER: two
ROW TRIGGER: three
STATEMENT TRIGGER.
この問題の回避策はありますか?
ビューに対する