【DM】ドリーム・データベースのトリガの例
8747 ワード
テストデータセットの作成
例1:変更操作によるヒント
プログラム
結果
テーブルの定義とトリガの定義の順序に注意してください.トリガが確立された後にターゲットテーブルが再構築されると、トリガは有効になりません.
インスタンス2:メタグループレベルトリガと文レベルトリガ、古い値と新しい値の印刷
プログラム
結果
例3:INSTAD OF型トリガ、置換動作
データセット構築:V 1ビュー
フリップフロップを作成
効果
INSTEAD OFトリガはビューに対してのみ有効であり、ベーステーブルは変更されません
例4:行レベルトリガと文レベルトリガの比較
上のテストデータに続く
プログラム
効果
AFTER/BEFORE型フリップフロップはビューでの作成はサポートされていません
INSTAD型トリガは行レベルのみで、変換も無効です
実行効果から見ると、文レベルのトリガは1回しかトリガーされず、行数に影響を与える回数によって異なります.
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
ID INT IDENTITY(1,1),
NAME VARCHAR(50),
CITY VARCHAR(50)
);
INSERT INTO TEST(NAME,CITY) VALUES(' ',' '),(' ',' '),(' ',' ');
例1:変更操作によるヒント
プログラム
CREATE OR REPLACE TRIGGER TRG
AFTER UPDATE OF NAME ON TEST
BEGIN
PRINT ' ';
END;
結果
SQL> CREATE OR REPLACE TRIGGER TRG
2 AFTER UPDATE OF NAME ON TEST
3 BEGIN
4 PRINT ' ';
5 END;
6 /
: 5.871( ). :2006.
SQL> UPDATE TEST SET NAME=' ' WHERE ID='3';
1
: 0.851( ). :2007.
テーブルの定義とトリガの定義の順序に注意してください.トリガが確立された後にターゲットテーブルが再構築されると、トリガは有効になりません.
インスタンス2:メタグループレベルトリガと文レベルトリガ、古い値と新しい値の印刷
プログラム
CREATE OR REPLACE TRIGGER TRG
AFTER UPDATE OF NAME ON TEST
FOR EACH ROW --
BEGIN
PRINT ' , '||:OLD.NAME||', '||:NEW.NAME;
END;
-- :':OLD' ,':NEW' 。 , "FOR EACH STATEMENT" , 。
結果
SQL> CREATE OR REPLACE TRIGGER TRG
2 AFTER UPDATE OF NAME ON TEST
3 FOR EACH ROW
4 BEGIN
5 PRINT ' , '||:OLD.NAME||', '||:NEW.NAME;
6 END;
7 /
: 55.198( ). :2008.
SQL> UPDATE TEST SET NAME=' ' WHERE ID='3';
, ,
1
: 14.871( ). :2009.
例3:INSTAD OF型トリガ、置換動作
データセット構築:V 1ビュー
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
ID INT IDENTITY(1,1),
NAME VARCHAR(50),
CITY VARCHAR(50)
);
INSERT INTO TEST(NAME,CITY) VALUES(' ',' '),(' ',' '),(' ',' ');
CREATE VIEW V1 AS SELECT * FROM TEST;
フリップフロップを作成
CREATE OR REPLACE TRIGGER TRI
INSTEAD OF UPDATE ON V1
BEGIN
INSERT INTO TEST(NAME,CITY) VALUES(' ',' ');
END;
効果
SQL> UPDATE V1 SET CITY =' ' WHERE ID=1;
1
: 33.769( ). :2019.
SQL> SELECT * FROM V1;
ID NAME CITY
---------- ----------- ---- ----
1 1
2 2
3 3
4 4
: 0.548( ). :2020.
INSTEAD OFトリガはビューに対してのみ有効であり、ベーステーブルは変更されません
例4:行レベルトリガと文レベルトリガの比較
上のテストデータに続く
プログラム
--
CREATE OR REPLACE TRIGGER TRI_1
AFTER UPDATE ON TEST
FOR EACH STATEMENT
BEGIN
PRINT ' ';
END;
--
CREATE OR REPLACE TRIGGER TRI_2
AFTER UPDATE ON TEST
FOR EACH ROW --
BEGIN
PRINT ' ';
END;
効果
SQL> UPDATE TEST SET CITY=' ' WHERE ID IN (1,2,3,4,5);
5
: 1.339( ). :2029.
AFTER/BEFORE型フリップフロップはビューでの作成はサポートされていません
INSTAD型トリガは行レベルのみで、変換も無効です
実行効果から見ると、文レベルのトリガは1回しかトリガーされず、行数に影響を与える回数によって異なります.