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 mit
EXECUTE 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