Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Obtendo erro ao executar Stroredprocedure


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.