Es geht um den Aufruf einer Stored Procedure, die als InOut Parameter einen Ref Cursor zurück gibt. Jeder, der sich jetzt denkt "was zum Geier ist ein Ref Cursor": bitte weiter gehen, hier gibt es nichts zu sehen
In Java funktioniert das hervorragend mit einem Aufruf der Art:
Code: Alles auswählen
CallableStatement statement = connection.prepareCall("declare ret SPSCHEMA.TYPES.DB_RESULT;" +
"begin SESSION.APP_ID := 123;" +
"ret := PARAMS.DB_CURSOR_OPEN(" +
"i_PARAM_ID => ?," +
"io_CURSOR => ?" +
"); end;");
statement.setInt(1, 12345);
statement.registerOutParameter(2, OracleTypes.CURSOR);
statement.execute();
ResultSet resultSet = (ResultSet)statement.getObject(2);
while (resultSet.next()) {
System.out.println(resultSet.getString("SHORTNAME"));
}
Also kurz um: es wird PARAMS.DB_CURSOR_OPEN ausgeführt, der erste Parameter wird mit "12345" belegt, der zweite als Out Parameter wird in ein ResultSet gecastet und darüber wird dann iteriert.
Genau dieser letzte Punkt würde mich nun bei ZEOS reizen: wie kann ich mit diesem Cursor umgehen? Als Parameter Typ gibt es ja "ftCursor" ... aber wie kann ich den einem TZQuery zuweisen?
P.S.: TZStoredProc wäre zwar schön gewesen, bietet mir aber nicht die nötigen Freiheiten (Rückgabetyp per "declare" setzen, vor dem Aufruf noch globale Variablen setzen, etc.).