Datenbank: firebird • Version: 2.5 • Zugriff über: IBDAC
Variablen in trigger
Hallo zusammen,
wie kann ich in einem Trigger mehr als eine Variable deklarieren?
Code:
geht
CREATE OR ALTER trigger test_biu0 for tab
active before insert or update position 0 as DECLARE VARIABLE a integer; begin select x from z where ... into :a; -- :a zuweisen an new. usw end
Code:
geht nicht!!!
CREATE OR ALTER trigger test_biu0 for tab
active before insert or update position 0 as DECLARE VARIABLE a integer; <- Fehler: ; wird bemängelt DECLARE VARIABLE b integer; begin select x,y from z where ... into :a, :b; -- :a :b zuweisen an new. usw end auch DECLARE VARIABLE a,b integer; usw. gehen nicht. Was mach ich falsch? Kann man in einem Trigger etwa nur eine Variable nutzen? Was mach dann aber wenn ich zur Berechnung eines Feldwertes in einer Tabelle 2 oder mehr Werte aus einer anderen Tabelle brauche? Gibt es da dann eine andere Möglichkeit? Bin für jede Anregung/Hilfe dankbar Gruß Bernhard |
AW: Variablen in trigger
Schreibe Declare variable vor jede Variable. 8-)
|
AW: Variablen in trigger
Hab ich doch.
Code:
geht aber nicht. Semikolon wird moniert.
as
DECLARE VARIABLE a integer; <- Fehler: ; wird bemängelt DECLARE VARIABLE b integer; begin lass ich's weg kennt er DECLARE nicht |
AW: Variablen in trigger
Das kann ich nicht nachvollziehen, bei mir funktioniert das (mit IBExpert auf einer FB 2.5-DB ausprobiert).
|
AW: Variablen in trigger
Hast du vorher das Terminalzeichen durch ein anderes ersetzt?
SQL-Code:
SET Term !!;
|
AW: Variablen in trigger
Stimmt, daran hab ich gar nicht gedacht. Hier mal der von IBExpert generierte Code:
SQL-Code:
/******************************************************************************/
/**** Following SET SQL DIALECT is just for the Database Comparer ****/ /******************************************************************************/ SET SQL DIALECT 3; SET TERM ^ ; CREATE OR ALTER TRIGGER TR_TEST FOR TBL_TEST ACTIVE AFTER INSERT POSITION 0 AS DECLARE VARIABLE a INTEGER; DECLARE VARIABLE b INTEGER; BEGIN SELECT Zahl1, Zahl2 FROM TBL_TEST INTO :a, :b; -- Nichts weiter, es geht ja nur um die Syntax END ^ SET TERM ; ^ |
AW: Variablen in trigger
@mkinzler
nein habe ich nicht. Muss/soll ich das? ich nutze zum erstellen des triggers IBExpert 2011.04.03 Personal Edition. hier mal der komplette Triggertest aus dem Fenster: Trigger
Code:
im Fenster DDL steht dann:
CREATE OR ALTER trigger stueckliste_biu0 for stueckliste
active before insert or update position 0 as DECLARE VARIABLE eh_id integer; DECLARE VARIABLE f_st double; begin select einheiten.id, einheiten.f_stueli from artikel join einheiten on artikel.einheit = einheiten.id where artikel.id=new.komponente_id -- st.komponente_id=24 into :eh_id, :f_st; if (eh_id<100) then new.menge= :eh_id; end
Code:
die Fehlermeldung:
SET SQL DIALECT 3;
SET TERM ^ ; CREATE OR ALTER TRIGGER STUECKLISTE_BIU0 FOR STUECKLISTE ACTIVE BEFORE INSERT OR UPDATE POSITION 0 as DECLARE VARIABLE eh_id integer; --DECLARE VARIABLE f_st double; begin /* Rechenvorschrift für Menge: Einheit < 100 Menge wird direkt eingegeben 99 < Einheit < 200 Menge wird über Anzahl eingegeben 199 < Einheit < 300 Menge wird über Anzahl+L eingegeben 299 < Einheit Menge wird über Anzahl+L+B eingegeben */ select einheiten.id--, einheiten.f_stueli from artikel join einheiten on artikel.einheit = einheiten.id where artikel.id=new.komponente_id -- st.komponente_id=24 into :eh_id; -- :f_st; if (eh_id<100) then new.menge= :eh_id; end ^ SET TERM ; ^ Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 5, column 31. ;. Das ist die Zeile: DECLARE VARIABLE f_st double; |
AW: Variablen in trigger
Hallo,
Hab die Lösung: muss heissen: DECLARE VARIABLE a integer; DECLARE VARIABLE b float; double ist quatsch! Manchmal ist's halt nicht so einfach. Kurios ist allerdings, dass sich nach einmaligem probieren von DECLARE VARIABLE a integer; DECLARE VARIABLE b double; auch nicht mehr DECLARE VARIABLE a integer; DECLARE VARIABLE b integer; kompilieren lässt. |
AW: Variablen in trigger
Nicht double, sondern double precision, dann geht das auch.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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