Entwickler-Ecke

Datenbanken - problem mit Stored Procedure IB 6.01


CenBells - Fr 18.10.02 16:46
Titel: problem mit Stored Procedure IB 6.01
hallo leute

ich habe eine tabelle namens GAESTE in der es eine spalte mit namen GAESTE_KEY gibt.

Wenn ich nun folgende procedure erzeuge und ausführe

create procedure get_Prev_Guest_key(PASSED_CURR_KEY Integer)
returns
(PREV_KEY INTEGER)
as
declare Variable vKey INTEGER;
begin
select MAX(GAESTE_KEY) FROM GAESTE
WHERE GAESTE_KEY < :PASSED_CURR_KEY
Into :vKEY;
PREV_KEY = vKEY;
end
^

bekomme ich immer einen leeren rückgabe wert. Prev_Key ist also immer null. Doch wenn ich das select statement allein ausführe, also nicht in der stored procedure, klappt alles wunderbar.

Kann mir wer sagen, wo das problem liegt?

danke
Ken


LCS - Fr 18.10.02 18:06

Hi
ich nehme mal an dass du die Procedure aufrufst bevor du einen neuen Datensatz anlegst. Wenn das so ist, würde ich zuerst mal die WHERE-Klausel in deiner Select-Anweisung weglassen. Das ist aber auch das Einzige was mir auffällt.
Mal angenommen der Parameter PAST_CURR_KEY wird nicht korrekt an die Procedure übergeben, würde die DB einen vergleich mit < NULL ausführen und der würde eben ein leeres Ergebnis liefern.
Probier doch mal mit dem SQL-Monitor zu kontrollieren, ob der Wert richtig übergeben wird. Ansonsten lass ihn einfach mal komplett weg.

Gruss Lothar


CenBells - Fr 18.10.02 18:19

hallo lcs

ich habe in meiner DB 5500 Datensätze. Der wert wird richtig übergeben

wenn ich oben

for select ...
...
do
suspend;

mache, klappt alles


LCS - Sa 19.10.02 11:20

Hi
ich hab mal versucht das nachzuvollziehen und das klappt einwandfrei. Die Procedure ist in Ordnung. Beim Zugriff über IBConsole und beim Zugriff aus einem Programm heraus alles in Ordnung.
Hier scheint der Hund wirklich in deinem Programm begraben zu sein. :(

Gruss Lothar


CenBells - Sa 19.10.02 12:16

das problem habe ich auch in der ibconsole... poste doch mal, wie du die prozedur von dort abfragst. vielleicht ist das das problem.

Gruß
Ken


LCS - Sa 19.10.02 12:25

Aufruf der Procedure in der IBConsole:

Quelltext
1:
execute procedure get_prev_guest_key 5                    

Die 5 ist der Übergabeparameter PASSED_CUR_KEY. Der Returnwert wird automatisch angezeigt.

Gruss Lothar


CenBells - Sa 19.10.02 15:14

ohh, danke ich habe immer
select * from get_prev_Guest_Key(5)

gemacht
....

Jetzt verstehe ich dann auch den unterschied.

Danke. Dann kann ich einige funktionen umstricken...

gruß
Ken