Wenn ich es richtig sehe, musst Du das SELECT-Ergebnis in eine Variable speichern, damit Du es für den Rückgabewert verwenden kannst; und
das fehlt (ich habe die Prozedur entsprechend geändert):
Zitat von
Sven Janssen:
SQL-Code:
SET TERM ^;
create procedure nextFreeLiefNumber ( lBound char(7), uBound char(7))
returns (A_RETURN INTEGER)
AS
CREATE VARIABLE freienummer INTEGER; /* den richtigen Typ musst Du eintragen */
begin
SELECT o.L1_NR FROM FLIEF_1 o where o.L1_nr between lBound and uBound
AND NOT EXISTS (SELECT i.L1_NR FROM FLIEF_1 i
WHERE cast(i.L1_NR as double precision) = cast(o.L1_NR as double precision)
+ cast(1 as double precision))
INTO :freienummer;
A_RETURN = cast(freienummer as double precision)+1;
SUSPEND; /* das fehlte außerdem, wie mkinzler anmerkte */
end
SET TERM ;^
Die Fehlermeldungen verwirren, weil
IB nach dem Ende des SELECT-Befehls noch etwas erwartet, nämlich INTO.
Du musst aber aufpassen, dass dieser SELECT wirklich
immer nur einen Wert liefert; andernfalls erhältst Du zur Laufzeit eine neue unerklärliche Fehlermeldung.
War's das? Jürgen