Code:
execute x.procedurename(row.accc_no, row.bill_no, 0, null, row.total_balance, 'A',assgn_scen_site_cv, :assgn_scen_site_cv);
C'est ma procédure.
Comment obtenir la valeur de retour de ce proc et l'affecter à une variable?
Vous pouvez le créer comme ceci:
CREATE OR REPLACE PROCEDURE procedurename(param1 NUMBER, param2 varchar(20), returnvalue OUT NUMBER);
IS
BEGIN
... your code
END;
Et puis utilisez-le comme ceci:
returnvalue NUMBER;
procedurename(0, 'xxx', returnvalue);
dbms_output.putline(returnvalue);
Vous pouvez consulter la documentation CREATE PROCEDURE sur le site Web d'Oracle.
Si je comprends bien, vous essayez de consommer une procédure existante qui a une valeur de retour. Cela peut être fait dans une autre procédure, package ou fonction, mais la méthode la plus simple utilise un bloc. Dans la section declare, vous définissez les variables qui recevront les valeurs, puis vous les utilisez dans l'appel à la procédure.
DECLARE
vAccc_no Number(10);
vBill_no Number(10);
vTotal_Balance Number(10,2);
vAssgn_scen_site_cv Varchar(80);
vAssgn_scen_site_cv_i Varchar(80);
BEGIN
vAssgn_scen_site_cv_i := 'Pass To Procedure';
x.procedurename(vAccc_no, vBill_no, 0, null, vTotal_Balance, 'A', vAssgn_scen_site_cv
, vAssgn_scen_site_cv_i);
DBMS_Output.Put_Line('New value of Total_Balance: ' || vTotalBalance);
END;
/
Je devine les types de données et ce qui est entrée/sortie.
Si vous êtes celui qui écrit la procédure, vous voudrez peut-être en faire une fonction à la place. Alors que "procédure" et "fonction" sont souvent utilisés comme synonymes, en PL/SQL, ils sont assez différents et doivent être utilisés en conséquence.
Si vous avez besoin d'un programme qui change quelque chose (supprimer du contenu, créer de nouvelles structures, etc.), ce devrait être une procédure. Cependant, si l'objectif principal est d'obtenir une valeur de retour (sélection de données, obtention de résultats pour les calculs, etc.), il doit s'agir d'une fonction.
Les fonctions sont très faciles à utiliser en SQL (comme pour appeler des fonctions intégrées comme to_char (), length (), instr () ...), vous écrivez simplement:
select my_function('foo') from dual;
L'utilisation de dual est juste exemplaire, vous pouvez l'utiliser dans n'importe quelle instruction SQL.
Exemple de code:
CREATE OR REPLACE FUNCTION my_function (i_input IN varchar2) RETURN varchar2
IS
BEGIN
RETURN 'input: ' || i_input;
END;
L'appel ci-dessus renverra "input: foo".
Enveloppez votre SQL dans un bloc anonyme, par exemple:
declare
result VARCHAR2(4000);
A_STRING VARCHAR2(4000) := '';
A_START_POS NUMBER := 0;
A_END_POS NUMBER := 0;
begin
result := BETWNSTR(
A_STRING => A_STRING,
A_START_POS => A_START_POS,
A_END_POS => A_END_POS
);
-- optional value select
open ? for select result as result from dual;
end;
Notez que result := ...
Évite le changement de contexte entre les moteurs PL et SQL si vous souhaitez comparer avec select BETWNSTR(...) into result from dual;