RETURN


FUNKTION


Die Ausführung einer Funktion beenden und Rückgabewerte an den Aufrufer liefern.

SYNTAX



RETURN [ value-expression [ , ... ] ] [ WITH RESUME ]

BESCHREIBUNG


Die Ausführung der aktuellen Routine wird beendet und die Kontrolle an den Aufrufer zurückgegeben. Ist die Routine, in der die RETURN Anweisung ausgeführt wird, eine Funktion, können Werte in Form von value-expressions an den Aufrufer zurückgeliefert werden. Die Anzahl und die Datentypen der angegebenen RETURN Werte (value-expression) müssen mit den Angaben der RETURNS Klausel innerhalb der aktuellen Funktion übereinstimmen. Es besteht jedoch die Möglichkeit, weniger Werte über RETURN zurückzugeben, als in der RETURNS Klausel angegeben wurde. In diesem Fall bleiben die Variableninhalte, in denen die RETURN Werte gespeichert werden sollen, unberührt.
Das folgende Beispiel zeigt drei gültige RETURN Anweisungen innerhalb einer Funktion, wobei bei der letzten RETURN Anweisung nur ein Wert zurückgegeben wird:
CREATE FUNCTION string_cmp(matchstr1 CHAR(20), matchstr2(20))
	RETURNS SMALLINT, CHAR(20);
BEGIN
	DECLARE eq SMALLINT DEFAULT 0;
	DECLARE res CHAR(20);
	IF (matchstr1 < matchstr2) THEN
		SET eq = -1;
		SET res = 'LOWER';
		RETURN eq, res;
	ELSEIF (matchstr1 > matchstr2) THEN
		SET eq = 1;
		SET res = 'GREATER';
		RETURN eq, res;
	ELSE
		RETURN eq;
	END IF
END
END FUNCTION

Wird eine Funktion innerhalb einer Expression verwendet, darf die Funktion höchstens einen RETURN Wert liefern:
UPDATE rabatt_table SET rabatt = calc_rabatt();

Die Funktion calc_rabatt() darf höchstens einen Wert liefern.

Eine Funktion, die aus einem ESQLC-Programm oder einer Routine mit einer CALL Anweisung aufgerufen wurde, darf höchstens soviele Werte liefern, wie in der INTO Klausel beim CALL angegeben wurden.


EXEC SQL CALL range_values() INTO :i, :j, :k;

Die Funktion range_values() kann drei oder weniger Werte liefern.

RETURN WITH RESUME

Wird die WITH RESUME Klausel verwendet, können Ergebnismengen an den Aufrufer zurückgeliefert werden. Um die Ergebnismenge verarbeiten zu können, muß vom Aufrufer ein Cursor verwendet werden. Nach einer WITH RESUME Anweisung werden bei einem erneuten Aufruf der Funktion die Anweisungen ausgeführt, die der RETURN Anweisung unmittelbar folgen.
Im folgenden Beispiel werden die Ergebnisse einer SELECT Anweisung an den Aufrufer zurückgeliefert:


BEGIN
	DECLARE c1, c2, c3 INTEGER;
	DECLARE AT_END SMALLINT DEFAULT 1;

	FOREACH SELECT col1, col2, col3 INTO c1, c2, c3 FROM tab
		RETURN c1, c2, c3 WITH RESUME;
	END FOREACH

	RETURN AT_END;
END



DIAGNOSE


Eine RETURN Anweisung innerhalb einer Prozedur darf keine Werte zurückliefern.

Eine RETURN Anweisung darf nicht mehr Werte liefern, als in der RETURNS Klausel angegeben wurde oder als vom Aufrufer erwartet werden.

Wird die WITH RESUME Klausel verwendet, müssen Werte an den Aufrufer zurückgeliefert werden.



SIEHE AUCH


DECLARE, FETCH, FOREACH, CALL