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.
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;
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!
Allez dans l’outil de menu -> Sortie SQL, exécutez l’instruction PL/SQL, la sortie apparaîtra dans le panneau de sortie SQL.