2016-08-05 53 views
-2

Ich versuche, eine andere Tabelle mit einem Trigger zu aktualisieren. Hier ist mein Code:DB2 trigger das Update

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 

ich die folgende Fehlermeldung erhalten:

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

Und der Fehler ist? – jarlh

+0

Ein unerwartetes Token "END-OF-STATEMENT" wurde nach "CODE = N.CODE" gefunden. Erwartete Tokens können enthalten: "" .. SQLCODE = -104, SQLSTATE = 42601, DRIVER = 3.68.61 –

+0

Können Sie '//' Kommentare dort haben? Vielleicht brauchen Sie auch ';' nach dem UPDATE. – jarlh

Antwort

-1

Die ON table-reference scheint vom TRIGGER zu fehlen CREATE im OP gegeben; nur der OF column-name ist codiert. Könnte das die Ursache des Problems sein, obwohl ein seltsamer Ort für dieses Problem mit der Syntax diagnostiziert wird.

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

Guter Fang, aber ich denke, es braucht noch ein wenn nicht ein wann. – danny117

+0

Ich kann niemandem sagen, was ich denken soll, aber was ich [als einzige Änderung] gezeigt habe, hat für mich einen Auslöser geschaffen. Die Syntax aus dem Handbuch zeigt sogar 'WHEN - (- Suchbedingung -) -' was genau das ist, was der OP codiert hat; und vermutlich konnte ich einen DB2 TRIGGER mit der ursprünglichen Quelle erstellen, mit nur dieser kleinen Änderung, die ich vorgeschlagen habe. – CRPence

+0

ok Ich sehe was du jetzt redest. – danny117

0

Die folgenden skriptgesteuerten Anforderungen zeigen ein Setup gefolgt von zwei fehlgeschlagenen Anforderungen und einer erfolgreichen Anforderung; die erste CREATE TRIGGER ist im wesentlichen identisch [außer der Formatierung und Benennung des Triggers] zu dem aus dem OP, und die restlichen zwei das Ergebnis ihrer kleineren Überarbeitungen sind:

Setup:

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 

Mehrere TRIGGER CREATE Anfragen; der vollständige Triggername wird verwendet, um die effektive Mods aus dem Stand der Iteration und der Kommentar nach jeder Anfrage beschreibt für i das Ergebnis als erfahren mit IBM DB2 eingeleitet zu erklären 7.1:

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