![]() |
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:
Allerdings bekomme ich da die folgende Meldung:
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 ; #
SQL-Code:
Wo liegt denn nun der Fehler. :(
/* 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 [edit=Sharky]SQL-Tags eingefügt. Mfg, Sharky[/edit] |
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:
alex
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); |
Re: Trigger mit Prüfung
Hallo Alex,
wenn ich noch das fehlende where und die schließende Klammer ergänze funktioniert es.
SQL-Code:
Danke schön, jetzt ist alles ok.
( NOT EXISTS (select * from fibuktrg where kostentraeger = new.auftragnr ))
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz