Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zugriff auf Ergebnis einer Strored Procedure in SQL (https://www.delphipraxis.net/122930-zugriff-auf-ergebnis-einer-strored-procedure-sql.html)

DirkG 24. Okt 2008 13:09

Datenbank: Interbase • Version: 6 • Zugriff über: IBConsole

Zugriff auf Ergebnis einer Strored Procedure in SQL
 
Hallo!

Kann mir mal jemand auf die Sprünge helfen. :wall:

Ich habe in der Datenbank folgende Stored Procedure generiert:

SQL-Code:
SET TERM ^ ;

CREATE PROCEDURE StbGetID (MID INTEGER) RETURNS (PKID INTEGER) AS
BEGIN
  SELECT AVG(ID) FROM Stundenbuchungen WHERE (Mitglieder_ID = :MID) INTO :PKID;
  SUSPEND;
END
^

COMMIT WORK ^
SET TERM ;^
Ich kann die Procedure auch mit dem Aufruf :
SQL-Code:
SELECT * FROM StbGetID(31);
ansprechen. Nun würde ich gerne beim Hinzufügen eines Datensatzes über einen Trigger die neue ID aus der Procedure auslesen und in das entsprechende Datenbankfeld eintragen. Dazu habe ich folgendes versucht:

SQL-Code:
SET TERM ^ ;

CREATE TRIGGER Stb_Add FOR stundenbuchungen BEFORE INSERT AS
BEGIN

  IF (NEW.ID IS NULL) THEN
    NEW.ID = SELECT * FROM StbGetID(NEW.MITGLIEDER_ID);

END
^

COMMIT WORK ^
SET TERM ;^
:( Leider bekomme ich nur Fehlermeldungen um die Ohren gehauen. Wo ist der Fehler?

Billa 24. Okt 2008 13:20

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
Welche Meldungen?
Willst Du wirklich den Durchschnitt der IDs ermiiteln?

DeddyH 24. Okt 2008 13:24

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
Außerdem dürfte ein
Zitat:

SQL-Code:
NEW.ID = SELECT * FROM...

sowieso nicht funktionieren. Das Feld sollte schon benannt sein, oder irre ich mich?

Billa 24. Okt 2008 13:29

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
... ich denke, Du irrst nicht

DirkG 24. Okt 2008 13:31

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
@Billa
Zitat:

Welche Meldungen?
Die Fehlermeldung ist :

Dynamic SQL Error SQL error code = -104

Token unknown - line 4, char 49;

Statement:

CREATE TRIGGER Stb_Add FOR stundenbuchungen BEFORE INSERT AS
BEGIN
IF (NEW.ID IS NULL) THEN
SELECT NEW.ID FROM StbGetID(NEW.MITGLIEDER_ID);
END

Das ich den Durchschnitt berechne ist sicher nicht sinnvoll :oops:, doch mir ging es um das Prinzip des Zugriff aus einem Trigger auf die Prozedure (habe einfach mal was in die Procedure geschrieben, damit ich ein Ergebnis bekomme).

@DeddyH
Das Feld soll durch den Trigger auf der Serverseite versorgt werden. Daher wird es beim Einfügen eines Datensatz nicht mit übergeben. Der Name ID ist auch irreführend. Es ist nicht die Datensatz ID.

Billa 24. Okt 2008 13:33

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
Für so etwas gibt es Generatoren

Jetzt verstehe ich - abgesehen von der Syntax - erst recht nicht mehr, was eigentlich Deine Absicht ist.

DeddyH 24. Okt 2008 13:34

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
Das hab ich schon verstanden, aber theoretisch kann ein
SQL-Code:
SELECT *
ja mehrere Felder zurückliefern. Gut, ist in diesem Fall ausgeschlossen, aber ich denke nicht, dass Interbase das überprüft. Versuch es stattdessen mal mit
SQL-Code:
NEW.ID = SELECT PKID FROM StbGetID(NEW.MITGLIEDER_ID);

mkinzler 24. Okt 2008 13:36

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
Eher einen
SQL-Code:
select ... into :new.ID;

DeddyH 24. Okt 2008 13:39

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
Kann auch sein, ich habe sowas noch nie versucht, da noch nicht gebraucht. Allerdings muss ich mich Billa anschließen, wozu soll das gut sein?

DirkG 24. Okt 2008 13:39

Re: Zugriff auf Ergebnis einer Strored Procedure in SQL
 
@mkinzler
Das war die Lösung. Manchmal sieht man den Wald ...
Dank euch für diew schnelle Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr.
Seite 1 von 2  1 2      

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