web-dev-qa-db-fra.com

Appel d'une procédure stockée dans Oracle avec les paramètres IN et OUT

J'ai cette procédure:

CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;

Alors quand je le lance comme ça, ça ne retourne absolument rien:

DECLARE
    amount NUMBER;
BEGIN
    PROC1(1000001, amount);
    dbms_output.put_line(amount);
END;

BTW j'utilise DreamCoder pour Oracle. Y at-il un problème avec la procédure elle-même ou avec la façon dont je l'appelle? Il existe une entrée dans la table INVOICE avec INVOICE_NR égal à 1000001.

38
RegedUser00x

Si vous définissez la sortie du serveur en mode ON avant tout le code, cela fonctionne, sinon put_line () ne fonctionnera pas. Essayez le!

Le code est,

set serveroutput on;
CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;

Et ensuite, appelez la fonction telle quelle:

DECLARE
amount NUMBER;
BEGIN
PROC1(1000001, amount);
dbms_output.put_line(amount);
END;
50
Keerthi

J'ai eu le même problème. J'ai utilisé un déclencheur, et dans ce déclencheur j'ai appelé une procédure qui calcule des valeurs dans 2 variables OUT. Lorsque j'ai essayé d'imprimer le résultat dans le corps du déclencheur, rien à l'écran, mais j'ai résolu ce problème en créant 2 variables locales en fonction, calculez ce dont j'ai besoin et, enfin, copiez ces variables dans vos variables de procédure OUT. J'espère que ce sera utile, succès!

3
Elneny

Allez dans l’outil de menu -> Sortie SQL, exécutez l’instruction PL/SQL, la sortie apparaîtra dans le panneau de sortie SQL.

1
Alvin