Както казва Николас Караснов, имате нужда от аргументите в повикването, за да съответстват на декларацията на процедурата. В този случай имате OUT
параметър, така че имате нужда някъде за данните, които избирате да отидете - нещо, съответстващо на sys_refcursor
тип параметър.
Ако използвате SQL*Plus, за да тествате това, можете да декларирате SQL*Plus променлива
за това и след това го предайте като свързваща променлива и след това използвайте print
команда за показване на съдържанието на курсора:
variable rc refcursor
exec javao(1, :rc);
print rc
Това работи и в SQL Developer. Когато извикате процедурата от друг код, ще имате променлива, декларирана в PL/SQL блок или във външно приложение (напр. чрез jdbc
), но подробностите за тях зависят от това, което правите.
За да се обадите от Java, трябва да направите нещо като:
// 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
}
... но това граничи с псевдокод и ще трябва да прочетете документацията, за да попълните празните места (и да коригирате всички грешки; вероятно имате нужда от специфични за Oracle типове изрази например) и да добавите затваряне на обект и обработка на грешки всички всички тези други добри неща.