2011-07-19 5 views
2

J'essaie d'appeler une procédure stockée Oracle qui n'accepte aucun paramètre d'entrée. Cependant, lors de l'exécution de la procédure, je reçois un retour d'erreur indiquantAppelez la procédure stockée Oracle sans arguments

PLS-00306: wrong number or types of arguments in call to 'MY_PROC' 

Pour appeler le proc, je suis juste entrer dans le texte suivant dans TOra:

BEGIN 
SCHEMA.MY_PROC(); 
END; 

J'ai aussi essayé (même erreur que)

EXEC SCHEMA.MY_PROC(); 

Je connais MSSQL et je suis en mesure d'exécuter SP sans problème en utilisant le serveur SQL, mais je ne peux pas comprendre comment faire la même chose avec Oracle. Je ne peux pas voir le code réel pour la procédure stockée, mais de la documentation limitée que j'ai, il semble qu'il n'accepte aucun paramètre d'entrée et la valeur de retour est un curseur de référence. J'ai le sentiment que je dois passer un curseur de référence, mais tout ce que j'ai essayé à cet égard n'a pas fonctionné. Je veux juste voir les résultats du SP comme si j'avais fait une instruction SELECT, c'est-à-dire avec les enregistrements remplissant la grille de données dans le panneau de résultats dans l'interface TOra.

Merci pour tous les conseils.

+2

pouvez-vous poster la définition de votre procédure? –

+1

Même si vous n'avez pas la source, vous pouvez [décrire] (http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12019.htm#i2697562) la procédure pour voir ce que les paramètres sont attendus, et de quel type ils sont. Je m'attends à ce que cela ressemble beaucoup à l'exemple de @Justin Cave. Cela fonctionne également dans SQL * Plus et SQL Developer, aucune idée sur TOra non plus. –

Répondre

4

Il semble que la procédure ait un paramètre OUT (dans Oracle, les procédures ne renvoient rien mais peuvent avoir des paramètres OUT et IN OUT, les fonctions retournent quelque chose). Donc vous devrez passer une variable pour ce paramètre OUT. Quelque chose comme

DECLARE 
    l_results SYS_REFCURSOR; 
BEGIN 
    schema.my_proc(l_results); 
END; 

devrait appeler avec succès la procédure. Mais alors vous voulez que votre interface graphique affiche les résultats de ce curseur. Cela devient malheureusement un peu plus compliqué parce que vous parlez d'un problème spécifique à l'interface graphique.

Je n'utilise pas TOra, donc je ne sais pas ce que vous devez faire dans TOra pour que le curseur s'affiche. Dans SQL * Plus (ou SQL Developer, GUI gratuit Oracle), vous pouvez faire quelque chose comme

create or replace procedure my_proc(p_rc OUT SYS_REFCURSOR) 
as 
begin 
    open p_rc 
    for select 1 col1 
     from dual; 
end; 
/

variable rc refcursor; 
exec my_proc(:rc); 
print rc; 

Cela crée une procédure stockée avec un paramètre OUT qui est un curseur, déclare une variable hôte qui peut être transmis, puis imprime les résultats.

Questions connexes