Como diz Nicholas Karasnov, você precisa que os argumentos na chamada correspondam à declaração do procedimento. Neste caso você tem um
OUT
parâmetro, então você precisa de um lugar para os dados que você está selecionando - algo correspondente ao sys_refcursor
tipo de parâmetro. Se estiver usando o SQL*Plus para testar isso, você pode declarar um Variável SQL*Plus para isso e, em seguida, passe isso como uma variável de ligação e use o
print
comando para exibir o conteúdo do cursor:variable rc refcursor
exec javao(1, :rc);
print rc
Isso funciona no SQL Developer também. Ao chamar o procedimento de outro código, você terá uma variável declarada em um bloco PL/SQL ou em um aplicativo externo (por exemplo, via
jdbc
), mas os detalhes deles dependem do que você está fazendo. Para chamar de Java, você faria algo como:
// 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
}
... mas isso está beirando o pseudocódigo, e você precisará ler a documentação para preencher os espaços em branco (e corrigir quaisquer erros; você provavelmente precisará de tipos de instrução específicos do Oracle, por exemplo), e adicionar fechamento de objeto e tratamento de erros todos essas outras coisas boas.