Einzelnen Beitrag anzeigen

urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#4

Re: StoredProcedure Ergebnis (ZEOS/Firebird)

  Alt 6. Jan 2005, 23:06
Hallo Susanne,

kenne mich mit ZEOS nicht aus, aber das mit SUSPEND ist (zumindest in der Theorie) nicht ganz so einfach.

Es gibt zwei Arten von Procedures: selektierbare und ausführbare.
Die selektierbaren liefern eine Ergebnismenge zurück, die einen oder mehrere Datensätze haben kann.
Aufgerufen werden sie mit SELECT NewID FROM p_get_newhp_id (und evtl. WHERE, ORDER BY etc.).
In einer solchen Procedure ruft man für jeden zurückzugebenden Datensatz SUSPEND auf, etwa so:
SQL-Code:
FOR
  SELECT SpA, SpB, SpC
    FROM Tabelle
    INTO :A, B:, :C
  DO
  SUSPEND
Die ausführbaren Datensätze geben keine Datenmenge zurück, sondern entweder die Rückgabeparameter oder gar nichts (z.B. bei einer Insert-Prozedur). Aufgerufen werden sie mitEXECUTE PROCEDURE p_get_newhp_id RETURNING_VALUES :ergebnis Die Generator-Prozedur ist eigentlich eine ausführbare, daher solltest Du eigentlich nicht die Prozedur ändern (die war so in Ordnung, wie Du sie zuerst gepostet hast), sondern den Zugriff über die Komponente.
Wahrscheinlich (wie gesagt, ich kenne mich nicht mit ZEOS aus) solltest Du nicht "Open" verwenden, da dies vielleicht versucht, die Prozedur über ein SELECT aufzurufen (ich denke, "Open" klingt wie eine Query- oder Tabellen-Komponente). Such mal in der Dokumentation der Komponenten nach Methoden wie "ExecProc" oder "Exec" oder so etwas, damit dürfte es klappen (dann wären die Ergebnisse wahrscheinlich auch in den Params zu finden).

Wenn es mit Marcels Tip funktioniert, kannst Du es natürlich auch dabei belassen. Ich habe aber gelesen, dass man darauf achten sollte, ausführbare und selektierbare Prozeduren nicht durcheinanderzubringen (und insbesondere in ausführbaren Proz. nicht SUSPEND aufzurufen). Ich weiß nicht mehr genau, warum, vielleicht hatte es irgend etwas mit dem Verhalten im Fehlerfall zu tun oder mit Garbage Collection...

MfG
Urs
  Mit Zitat antworten Zitat