Oracle
 sql >> Base de données >  >> RDS >> Oracle

Obtention d'une erreur lors de l'exécution de Storedprocedure

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.