PDA

View Full Version : Trigger



juergenkemeter
15-11-04, 12:18
Hallo,
Ich will einen SQL Auslöser mit Database Navigator erstellen.

Hier das SQL-Statement welches ich ausprobiert habe:
------------------------------------------------
WHEN (PRISTW - PRSOLLW) > 0
THEN SET newrow.PRABWEI = 'Entspricht'
ELSE SET newrow.PRABWEI = 'Entspricht nicht';
END
------------------------------------------------


folgende Fehlermeldung wird zurückgegeben:
--------------------------------------------------------------------
Token ) ungültig. Gültige Token: < > = <> <= !< !> != >= ¬< ¬> ¬= IN IS NOT LIKE BETWEEN.

Nachrichten-ID:SQL0104

Ursache . . . . : Bei Token ) wurde ein Syntaxfehler entdeckt. Token ) ist kein gültiges Token. < > = <> <= !< !> != >= ¬< ¬> ¬= IN IS NOT LIKE BETWEEN ist eine Teilliste gültiger Token. Diese Liste geht davon aus, dass die Anweisung bis zu diesem Token korrekt ist. Es kann eine frühere Stelle in der Anweisung fehlerhaft sein, aber bis zu dieser Stelle scheint die Syntax gültig zu sein.Fehlerbeseitigung: Einen der folgenden Schritte durchführen und die Anforderung wiederholen:- SQL-Anweisung im Bereich des Token ) überprüfen. Anweisung korrigieren. Der Fehler kann ein fehlendes Komma oder Anführungszeichen sein, er kann in einem falsch geschriebenen Wort oder in der Anordnung der Klauseln begründet sein.- Ist das fehlerhafte Token <ANWEISUNGSENDE>, die Anweisung korrigieren, da sie mit einer ungültigen Klausel endet.
--------------------------------------------------------------------


/Jürgen

B.Hauser
15-11-04, 13:28
Hallo,
Ich will einen SQL Auslöser mit Database Navigator erstellen.

Hier das SQL-Statement welches ich ausprobiert habe:
------------------------------------------------
WHEN (PRISTW - PRSOLLW) > 0
THEN SET newrow.PRABWEI = 'Entspricht'
ELSE SET newrow.PRABWEI = 'Entspricht nicht';
END
------------------------------------------------


folgende Fehlermeldung wird zurückgegeben:
--------------------------------------------------------------------
Token ) ungültig. Gültige Token: < > = <> <= !< !> != >= ¬< ¬> ¬= IN IS NOT LIKE BETWEEN.

Nachrichten-ID:SQL0104

Ursache . . . . : Bei Token ) wurde ein Syntaxfehler entdeckt. Token ) ist kein gültiges Token. < > = <> <= !< !> != >= ¬< ¬> ¬= IN IS NOT LIKE BETWEEN ist eine Teilliste gültiger Token. Diese Liste geht davon aus, dass die Anweisung bis zu diesem Token korrekt ist. Es kann eine frühere Stelle in der Anweisung fehlerhaft sein, aber bis zu dieser Stelle scheint die Syntax gültig zu sein.Fehlerbeseitigung: Einen der folgenden Schritte durchführen und die Anforderung wiederholen:- SQL-Anweisung im Bereich des Token ) überprüfen. Anweisung korrigieren. Der Fehler kann ein fehlendes Komma oder Anführungszeichen sein, er kann in einem falsch geschriebenen Wort oder in der Anordnung der Klauseln begründet sein.- Ist das fehlerhafte Token <ANWEISUNGSENDE>, die Anweisung korrigieren, da sie mit einer ungültigen Klausel endet.
--------------------------------------------------------------------


/Jürgen

WHEN wird dann verwendet wenn der Trigger nur unter einer bestimmten Bedingung aktiviert werden soll. Bei Dir soll er jedoch immer aktiviert werden, Du willt nur unterschiedlich reagieren.

Du brauchst entweder eine IF oder eine CASE-Abfrage

Begin
If (PRISTW - PRSOLLW) > 0 THEN SET newrow.PRABWEI = 'Entspricht';
Else SET newrow.PRABWEI = 'Entspricht nicht';
End

oder

Begin
Case When PRISTW - RRSOLLW > 0 THEN SET newrow.PRABWEI = 'Entspricht';
Else SET newrow.PRABWEI = 'Entspricht nicht';
End

Wo kommen die Felder PRISTW und PRSOLLW her?
Du hast zu dem Zeitpunkt, zu dem der Trigger aktiviert wird nur den alten und/oder den neuen Satz zur Verfügung. Die Felder müssten m.E. Qualifiziert werden, also NewRow.PRISTW.

Nimm Dir doch mal das Redbook Stored Procedures, Triggers und User Defined Functions (http://www.redbooks.ibm.com/abstracts/sg246503.html?Open) zur Brust, da ist alles genau erklärt.

Birgitta

juergenkemeter
17-11-04, 10:31
Hi,
alles klar, hab kürzlich die Lösung gefunden:
---------------------------------------------
WHEN (PRISTW is not NULL and PRSOLLW is not NULL)
BEGIN
CASE
WHEN PRISTW - PRSOLLW > 0
THEN SET newrow.PRABWEI = 'Entspricht';
ELSE
SET newrow.PRABWEI = 'Entspricht nicht';
END CASE;
END
---------------------------------------------

Ciao,
Jürgen