Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Trigger mit Prüfung (https://www.delphipraxis.net/55315-trigger-mit-pruefung.html)

it-frosch 19. Okt 2005 14:06

Datenbank: Firebird • Version: 1.0 • Zugriff über: SQL

Trigger mit Prüfung
 
Hallo,

ich habe heute meinen ersten Trigger erstellt.
Er tut auch das was er soll. Nun möchte ich allerdings eine Prüfung mit einbauen, da es sein kann daß eine Auftragsnummer mehrfach auftauchen kann.
SQL-Code:
SET TERM # ;
/* Bei Anlegen eines neuen Auftrags diesen als Kostenträger anlegen */
CREATE TRIGGER FIBUKTRG_upd FOR auftrag
After Insert AS
  BEGIN
   [b] if new.auftragnr not in (select kostentraeger from fibuktrg) Then [/b] <-----Prüfung
    INSERT INTO FIBUKTRG (KOSTENTRAEGER, SPRACHCODE, BEZEICHNUNG, INFIBUGEB, VORLNR, GSNR) VALUES (new.AUFTRAGNR, '1',new.OBJEKTBEZ , NULL, NULL, NULL);
  END #
SET TERM ; #
Allerdings bekomme ich da die folgende Meldung:
SQL-Code:
/* Bei Anlegen eines neuen Auftrags diesen als Kostenträger anlegen */
CREATE TRIGGER FIBUKTRG_upd FOR auftrag
After Insert AS
  BEGIN
    if new.auftragnr not in (select kostentraeger from fibuktrg) then  
    INSERT INTO FIBUKTRG (KOSTENTRAEGER, SPRACHCODE, BEZEICHNUNG, INFIBUGEB, VORLNR, GSNR) VALUES (new.AUFTRAGNR, '1',new.OBJEKTBEZ , NULL, NULL, NULL);
  END )
Message: isc_dsql_prepare failed

SQL Message : -104
Invalid token

Engine Code   : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 7, char 8
new
Wo liegt denn nun der Fehler. :(

[edit=Sharky]SQL-Tags eingefügt. Mfg, Sharky[/edit]

alex517 19. Okt 2005 19:47

Re: Trigger mit Prüfung
 
Hallo it-frosch,

als Erstes muß der Ausdruck in einem IF () Then-Statement bei FB/IB in Klammern eingeschlossen sein.
Außerdem mußt du in deinem Fall mit EXISTS arbeiten.
Versuchs mal damit.

SQL-Code:
IF ( NOT EXISTS (select * from fibuktrg kostentraeger = new.auftragnr ) THEN
  INSERT INTO FIBUKTRG (KOSTENTRAEGER, SPRACHCODE, BEZEICHNUNG, INFIBUGEB, VORLNR, GSNR)
  VALUES (new.AUFTRAGNR, '1',new.OBJEKTBEZ , NULL, NULL, NULL);
alex

it-frosch 20. Okt 2005 15:16

Re: Trigger mit Prüfung
 
Hallo Alex,

wenn ich noch das fehlende where und die schließende Klammer ergänze funktioniert es.
SQL-Code:
( NOT EXISTS (select * from fibuktrg where kostentraeger = new.auftragnr ))
Danke schön, jetzt ist alles ok.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz