Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Variablen in trigger (https://www.delphipraxis.net/161926-variablen-trigger.html)

Berni68 27. Jul 2011 17:01

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:
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
geht

Code:
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
geht nicht!!!

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

Hansa 27. Jul 2011 17:05

AW: Variablen in trigger
 
Schreibe Declare variable vor jede Variable. 8-)

Berni68 27. Jul 2011 17:09

AW: Variablen in trigger
 
Hab ich doch.

Code:
as
  DECLARE VARIABLE a integer; <- Fehler: ; wird bemängelt
  DECLARE VARIABLE b integer;
begin
geht aber nicht. Semikolon wird moniert.
lass ich's weg kennt er DECLARE nicht

DeddyH 27. Jul 2011 17:20

AW: Variablen in trigger
 
Das kann ich nicht nachvollziehen, bei mir funktioniert das (mit IBExpert auf einer FB 2.5-DB ausprobiert).

mkinzler 27. Jul 2011 17:22

AW: Variablen in trigger
 
Hast du vorher das Terminalzeichen durch ein anderes ersetzt?

SQL-Code:
SET Term !!;

DeddyH 27. Jul 2011 17:32

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 ; ^

Berni68 27. Jul 2011 17:32

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:
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
im Fenster DDL steht dann:
Code:
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 ; ^
die Fehlermeldung:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 5, column 31.
;.

Das ist die Zeile: DECLARE VARIABLE f_st double;

Berni68 27. Jul 2011 17:58

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.

DeddyH 27. Jul 2011 18:03

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