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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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