Zoals Nicholas Karasnov zegt, heb je de argumenten in de aanroep nodig om overeen te komen met de procedureverklaring. In dit geval heb je een OUT
parameter, dus je hebt een plek nodig waar de gegevens die je selecteert naartoe moeten gaan - iets dat overeenkomt met de sys_refcursor
parametertype.
Als u SQL*Plus gebruikt om dit te testen, kunt u een SQL*Plus variabele
hiervoor en geef dat dan door als een bindvariabele, en gebruik dan de print
commando om de cursorinhoud weer te geven:
variable rc refcursor
exec javao(1, :rc);
print rc
Dit werkt ook in SQL Developer. Als je de procedure vanuit een andere code aanroept, heb je een variabele gedeclareerd in een PL/SQL-blok, of in een externe applicatie (bijvoorbeeld via jdbc
), maar de details hiervan hangen af van wat je doet.
Als u vanuit Java wilt bellen, doet u zoiets als:
// get connection
CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
cStmt.setInt(1, 1);
cStmt.registerOutParameter(2, OracleTypes.cursor);
cStmt.execute();
ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
while (rSet.next())
{
// get columns from result set row and do something with the data
}
... maar dat grenst aan pseudocode, en je moet de documentatie lezen om de lege plekken in te vullen (en eventuele fouten corrigeren; je hebt waarschijnlijk bijvoorbeeld Oracle-specifieke instructietypen nodig), en alles toevoegen aan objectafsluiting en foutafhandeling dat andere goede spul.