AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablen in trigger

Ein Thema von Berni68 · begonnen am 27. Jul 2011 · letzter Beitrag vom 27. Jul 2011
Antwort Antwort
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#1

Variablen in trigger

  Alt 27. Jul 2011, 17:01
Datenbank: firebird • Version: 2.5 • Zugriff über: IBDAC
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
Bernhard
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

AW: Variablen in trigger

  Alt 27. Jul 2011, 17:05
Schreibe Declare variable vor jede Variable.
Gruß
Hansa
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Variablen in trigger

  Alt 27. Jul 2011, 17:09
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
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Variablen in trigger

  Alt 27. Jul 2011, 17:20
Das kann ich nicht nachvollziehen, bei mir funktioniert das (mit IBExpert auf einer FB 2.5-DB ausprobiert).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Variablen in trigger

  Alt 27. Jul 2011, 17:22
Hast du vorher das Terminalzeichen durch ein anderes ersetzt?

SET Term !!;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Variablen in trigger

  Alt 27. Jul 2011, 17:32
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 ; ^
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Variablen in trigger

  Alt 27. Jul 2011, 17:32
@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;
Bernhard
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Variablen in trigger

  Alt 27. Jul 2011, 17:58
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.
Bernhard

Geändert von Berni68 (27. Jul 2011 um 18:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Variablen in trigger

  Alt 27. Jul 2011, 18:03
Nicht double, sondern double precision, dann geht das auch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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