2016-07-28 18 views
-3

テーブルの各行に対して更新トリガーを使用しています。たとえば、emp_tableを使用して1つの列modifid_dateを更新してからテーブルにロードします。行の同じ/既存の値で表を更新しようとしている場合、このトリガーは起動するかどうかです。同じ値が列の行に更新されている場合、更新トリガーが発生する

トリガー条件: :new.modifid_dt:= sysdate;

更新前のテーブル値:ジョン(名)、4867(ID)、20-04-2016(modifid_dt)今すぐ更新しようとして 表値:ジョン(名)、4867(ID)

+1

トリガをテストして試してみたら、解雇されていますか? – dubes

答えて

0

使用している値に関係なく、トリガーが発生します。

SQL> create table testTrigger (a number) 
    2/

Table created. 

SQL> CREATE OR REPLACE TRIGGER before_update_trigger 
    2 before update on testTrigger 
    3 for each row 
    4 begin 
    5  dbms_output.put_line('Trigger fired!'); 
    6 end; 
    7/

Trigger created. 

SQL> insert into testTrigger values (10); 

1 row created. 

SQL> 
SQL> 
SQL> update testTrigger set a = 10; 
Trigger fired! 

1 row updated. 

SQL> update testTrigger set a = 11; 
Trigger fired! 

1 row updated. 

SQL> 
+0

[条件付きトリガ](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#CIHBJHFE)を作成することは可能です:_ "条件付きトリガには、トリガー文が影響を及ぼす行ごとにデータベースが評価するSQL条件。 "_トリガーは毎回起動しますが、トリガーの本体は実行されない可能性があります。 – user272735

0

新規または既存の値 - 関係なく、更新を実行してトリガを起動します。

+0

A [条件付きトリガ](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#CIHBJHFE):_ "条件付きトリガには、SQL条件を指定するWHEN句があります。データベースは、トリガー文が影響を及ぼす行ごとに評価します。 "_トリガーは起動しますが、トリガーの本体が実行されない可能性があります。 – user272735

+0

うん、そうです。質問は「それは発射されますか?そうです、それは起こりますが、それが起こったときにtopicstarterが何をしたいのか分かりません。たぶん、同じ値が更新されたときにのみアクションを実行したいのでしょうか?ああ、Vrebalism、ハァッ。 – nilsman

1

あなたはこのようにトリガーを書くべき発射 "false" を避けたい場合:例えば

create or replace trigger trigger1 
before update on tst 
for each row 
begin 
    IF :new.t_key != :old.t_key AND ... THEN 
    dbms_output.put_line('Trigger fired!'); 
    END IF; 
end; 

しかし、もちろんのNULL値、の用心。

+0

代わりに、[条件付きトリガ](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#CIHBJHFE)を使用してください:_ "条件付きトリガにはSQLを指定するWHEN句がありますトリガする文が影響を及ぼす各行についてデータベースが評価する条件。 " – user272735

関連する問題