récupération d'un curseur d'une proc dans une autre proc
Bonsoir,
Je travaill sur un package composé de :
- une procédure permettant d'identifier un profil d'utilisateur
- 10 procédures correspondants à mes états de restitution utilisant chacune la proc précédente.
Chaque proc de restit est composée de la manière suivante :
- insertion de données dans une table
- mise à jour de champs n'ayant être pu inséré la première fois.
Pour cette mise à jour il se peut qu'il y ait plusieurs valeurs pour un champ, il faut donc que parvienne à créer une chaine de caractères afin de faire la mise à jour avec celle-ci.
J'ai donc décidé de créer une nouvelle procédure qui me renverrai toutes les valeurs correspondantes au champ à mettre à jour sous forme de chaine de caractères.
Voici un extrait pour un seul champ de cette procédure:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
CREATE OR REPLACE PROCEDURE PR_UPD_TMP_RESTIT
(
UPD_POLE IN OUT VARCHAR2
)
AS
-- DECLARATION PERMETTANT DE SELECTIONNER LES CHAMPS DE MISES A JOUR
CURSOR C_SEL_UPD_POLE
IS
SELECT FM.MSG_VALUE
FROM MISSION M, DOMAINE_MISSION MD, DOMAINE D, TYPE_DOMAINE TD, FWS_MESSAGES FM, FWS_LANG FL
WHERE M.I_MISSION = rc_sel_restit_1.I_MISSION
AND M.I_MISSION = MD.I_MISSION
AND MD.I_CODE_DOMAINE = D.I_CODE_DOMAINE
AND MD.D_DEBUT_DOM = D.D_DEBUT_DOM
AND D.I_TYPE_DOMAINE = TD.I_TYPE_DOMAINE
AND D.DT_CREA_TDOM = TD.DT_CREA_TDOM
AND TD.I_TYPE_DOMAINE = 1
AND D.CD_TRAD_DOMAINE = FM.MSG_KEY
AND FL.ID_LANG = P_LANGUE
AND UPPER(FM.LOCALEKEY) = UPPER(FL.LANG_CODE)
;
v_upd_pole C_SEL_UPD_POLE%ROWTYPE;
BEGIN
UPD_POLE := NULL;
IF C_SEL_UPD_POLE%ISOPEN THEN
CLOSE C_SEL_UPD_POLE;
END IF;
OPEN C_SEL_UPD_POLE;
FETCH C_SEL_UPD_POLE INTO v_upd_pole;
UPD_POLE := v_upd_pole.MSG_VALUE;
LOOP
FETCH C_SEL_UPD_POLE INTO v_upd_pole;
EXIT WHEN C_SEL_UPD_POLE%NOTFOUND;
UPD_POLE := UPD_POLE||''', '''||v_upd_pole.MSG_VALUE;
dbms_output.put_line(UPD_POLE);
END LOOP;
CLOSE C_SEL_UPD_POLE; |
Définition des variables utilisées dans le code précédent :
- Ce curseur est définit dans la proc de restitution 1
Code:
1 2 3 4 5 6 7
|
CURSOR C_RESTIT_1
IS
SELECT *
FROM TMP_RESTIT_1;
rc_sel_restit_1 C_RESTIT_1%ROWTYPE; |
- P_LANGUE permet de choisir la langue de restitution
Le problème que je rencontre avec cette procédure retournant les chaines de caractères aux autres procédures pour effectuer les mises à jour est le suivant :
Il faudrait que je parvienne à donner le curseur en paramètre C_RESTIT_ en fonction du numéro de restit, et que celui-ci soit reconnu par cette procédure.
J'ai essayé de passer le numéro de la restitution en paramètre,et de faire dans la contrainte
Code:
1 2
|
WHERE M.I_MISSION = concat(concat('rc_sel_restit_', NUM_RESTIT),'.I_MISSION') |
mais cela ne marche pas.
Alors je ne sais pas comment faire???
PS je m'excuse pour la complexité du message mais j'ai essayé de détailler le plus possible mais en étant le plus synthétique quand même.
Merci :D