Oracle
 sql >> Database >  >> RDS >> Oracle

Ottenere un errore durante l'esecuzione di Stroredprocedure

Come dice Nicholas Karasnov, è necessario che gli argomenti nella chiamata corrispondano alla dichiarazione della procedura. In questo caso hai un OUT parametro, quindi hai bisogno di un posto per i dati che stai selezionando, qualcosa che corrisponda a sys_refcursor tipo di parametro.

Se stai usando SQL*Plus per testarlo, puoi dichiarare un Variabile SQL*Plus per questo e poi passarlo come una variabile di collegamento, quindi utilizzare print comando per visualizzare il contenuto del cursore:

variable rc refcursor
exec javao(1, :rc);
print rc

Funziona anche in SQL Developer. Quando chiami la procedura da altro codice, avrai una variabile dichiarata in un blocco PL/SQL o in un'applicazione esterna (ad esempio tramite jdbc ), ma i dettagli di questi dipendono da cosa stai facendo.

Per chiamare da Java, faresti qualcosa del tipo:

// 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
}

... ma confina con lo pseudocodice e dovrai leggere la documentazione per riempire gli spazi vuoti (e correggere eventuali errori; probabilmente hai bisogno di tipi di istruzioni specifici di Oracle, ad esempio), e aggiungere la chiusura dell'oggetto e la gestione degli errori tutto quell'altra roba buona.