Das funktioniert so nicht! So wie Du das vorhast kannst Du RESULT SETS ausgeben, jedoch keine UDTF. Bei der Ausgabe von RESULT SETS bleiben die Cursor geöffnet. In Folge-Aufrufen musst Du dafür sorgen, dass der CURSOR, sofern er nicht geschlossen ist, vor dem erneuten Öffenen zunächst geschlossen wird.

Für UDTFs kannst Du entweder eine temporäre Datei befüllen und diese dann im SELECT des RETURN-Statements ausgeben oder Du verwendest eine pipielined UDTF.
... etwa so:

Code:
Begin
   Declare SQLCODE as Integer Default 0;
   Declare YOURVAR as ....;
   Declare YOURSELECT as VarChar(1024) Default '';
   ... sonstige Variablen
   Declare C1 Cursor for DynSQL;

   Set YOURSELECT = 'Select .... '; 
   Prepare DYNSQL from YOURSELECT;
   Open C1;

   YOURLOOP: LOOP  Fetch Next From C1 into YourVar;
     IF SQLCODE = 100 Then Leave YourLoop;
     End IF;
     .....
     PIPE (YourVar);
   End Loop;
   Close C1;
   Return;
End;
Übrigens der Prepare darf nicht vor dem DECLARE CURSOR stehen, da alle DECLARE CURSOR Statements in der Declare-Section nach der Variablen Definition und vor den Handlern angegeben werden müssen.
Der PREPARE wie auch der OPEN, FETCH und CLOSE gehört in den Verarbeitungsteil der Prozedur.