Comme le dit Nicholas Karasnov, vous avez besoin que les arguments de l'appel correspondent à la déclaration de procédure. Dans ce cas vous avez un OUT
paramètre, vous avez donc besoin d'un endroit pour les données que vous sélectionnez - quelque chose correspondant au sys_refcursor
type de paramètre.
Si vous utilisez SQL*Plus pour tester cela, vous pouvez déclarer un Variable SQL*Plus
pour cela, puis passez-le en tant que variable de liaison, puis utilisez le print
commande pour afficher le contenu du curseur :
variable rc refcursor
exec javao(1, :rc);
print rc
Cela fonctionne également dans SQL Developer. Lorsque vous appelez la procédure à partir d'un autre code, vous aurez une variable déclarée dans un bloc PL/SQL, ou dans une application externe (par exemple via jdbc
), mais les détails de ceux-ci dépendent de ce que vous faites.
Pour appeler depuis Java, vous feriez quelque chose comme :
// 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
}
... mais c'est à la limite du pseudocode, et vous devrez lire la documentation pour remplir les blancs (et corriger les erreurs; vous avez probablement besoin de types d'instructions spécifiques à Oracle par exemple), et ajouter la fermeture d'objet et la gestion des erreurs tous tous ces autres bonnes choses.