Jak říká Nicholas Karasnov, potřebujete argumenty ve volání, aby odpovídaly deklaraci procedury. V tomto případě máte OUT
parametr, takže potřebujete někam, kde se mají data, která vybíráte, přesunout - něco, co odpovídá sys_refcursor
typ parametru.
Pokud k testování používáte SQL*Plus, můžete deklarovat Proměnná SQL*Plus
za tímto účelem a poté to předejte jako proměnnou vazby a poté použijte print
příkaz pro zobrazení obsahu kurzoru:
variable rc refcursor
exec javao(1, :rc);
print rc
Funguje to i v SQL Developer. Když zavoláte proceduru z jiného kódu, budete mít proměnnou deklarovanou v bloku PL/SQL nebo v externí aplikaci (např. přes jdbc
), ale podrobnosti o nich závisí na tom, co děláte.
Chcete-li volat z Javy, udělali byste něco jako:
// 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
}
... ale to hraničí s pseudokódem a budete si muset přečíst dokumentaci, abyste vyplnili prázdná místa (a opravili případné chyby; pravděpodobně potřebujete například typy příkazů specifické pro Oracle) a přidejte zavírání objektů a zpracování všech chyb. další dobré věci.