2016-08-05 53 views
-2

トリガーで別のテーブルを更新しようとしています。ここに私のコードは次のとおりです。DB2トリガー更新

CREATE TRIGGER REORDER 
     AFTER UPDATE OF ON_HAND 
     REFERENCING NEW AS N 
     FOR EACH ROW 
     WHEN (N.ON_HAND < 0.1) 
     BEGIN ATOMIC 
     UPDATE SRI set SRI.price = SRI.price*10 where SRI.CODE = N.CODE; 
    END 

私は次のエラーを取得する:

An unexpected token "END-OF-STATEMENT" was found following "CODE = N.CODE". Expected tokens may include: "".. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.68.61

+1

エラーは? – jarlh

+0

"CODE = N.CODE"の後に予期しないトークン "END-OF-STATEMENT"が見つかりました。期待されるトークンには次のものがあります: "" .. SQLCODE = -104、SQLSTATE = 42601、DRIVER = 3.68.61 –

+0

ここに '// 'コメントはありますか?また、UPDATEの後に ';'が必要になるかもしれません。 – jarlh

答えて

-1

ON table-referenceはOPで与えられたCREATE TRIGGERから欠落しているように見えます。 OF column-nameのみがコード化されています。その問題の原因となるかもしれませんが、奇妙な場所が構文上の問題で診断されています。

create trigger ReOrder 
after update of ON_HAND /* this names the column being updated */ 
       on ON_HAND_TABLE /* this is missing from OP */ 
referencing NEW as N 
… 
+0

良いキャッチですが、私はそれがまだ必要ではないと思っています。 – danny117

+0

私は何を考えるべきか誰にも伝えることはできませんが、私が[唯一の変化として]示したことは、私のためにきれいなトリガーを作りました。マニュアルの構文は、OPがコーディングしたものとまったく同じ 'WHEN - ( - search-condition - ) - 'を表示します。おそらく私が提案したわずかな変更だけで元のソースを使ってDB2 TRIGGERを作成することができたのでしょう。 – CRPence

+0

私は今あなたの話しているものを参照してください。 – danny117

0

次のスクリプトリクエストは、セットアップに2つの失敗したリクエストと成功したリクエストが続くことを示します。

セットアップ:

create table on_hand_table (code char, on_hand dec(3, 1)) 
; -- Table ON_HAND_TABLE created 
create table sri (code char, price dec(7, 2)) 
; -- Table SRI created 

は、いくつかのトリガーを作成する最初のCREATE TRIGGERはOPからのものと、残りの2つは、それらのマイナーリビジョンの結果である[フォーマットとトリガーの命名以外】本質的に同一でありますリクエスト;完全なトリガー名が前の反復から制定効果的な改造を説明するために使用され、各要求次のコメントは、私のために7.1経験し実行しているIBM DB2などの結果を説明します

create trigger ReOrder_source_unchanged    
after update of ON_HAND        
referencing NEW as N         
for each row           
when (N.ON_HAND < 0.1)        
begin ATOMIC           
    UPDATE SRI           
     set SRI.price = SRI.price*10      
    WHERE SRI.code = N.code       
    ;             
end             
-- Keyword REFERENCING not expected. Valid tokens: ON OR. 


create trigger ReOrder_OF_Changed_to_ON 
after update on ON_HAND    
referencing NEW as N     
for each row       
when (N.ON_HAND < 0.1)    
begin ATOMIC       
    UPDATE SRI       
     set SRI.price = SRI.price*10  
    WHERE SRI.code = N.code   
    ;         
end         
-- Table ON_HAND not found. 


create trigger ReOrder_both_OF_and_ON 
after update of ON_HAND    
       on ON_HAND_TABLE   
referencing NEW as N     
for each row       
when (N.ON_HAND < 0.1)    
begin ATOMIC       
    UPDATE SRI       
     set SRI.price = SRI.price*10  
    WHERE SRI.code = N.code   
    ;         
end         
-- Trigger REORDER_BOTH_OF_AND_ON created