Jak mówi Nicholas Karasnov, potrzebne są argumenty w wezwaniu, aby pasowały do deklaracji procedury. W tym przypadku masz OUT
parametr, więc potrzebujesz gdzieś danych, które wybierasz, aby przejść - coś odpowiadającego sys_refcursor
typ parametru.
Jeśli używasz SQL*Plus do testowania tego, możesz zadeklarować Zmienna SQL*Plus
w tym celu, a następnie przekaż ją jako zmienną wiązania, a następnie użyj print
polecenie, aby wyświetlić zawartość kursora:
variable rc refcursor
exec javao(1, :rc);
print rc
Działa to również w SQL Developer. Kiedy wywołasz procedurę z innego kodu, będziesz miał zmienną zadeklarowaną w bloku PL/SQL lub w zewnętrznej aplikacji (np. przez jdbc
), ale szczegóły zależą od tego, co robisz.
Aby zadzwonić z Javy, musisz zrobić coś takiego:
// 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 graniczy z pseudokodem i będziesz musiał przeczytać dokumentację, aby wypełnić puste pola (i poprawić wszelkie błędy; prawdopodobnie potrzebujesz na przykład typów instrukcji specyficznych dla Oracle) i dodać zamykanie obiektów i obsługę błędów wszystkich inne dobre rzeczy.