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:
Définition des variables utilisées dans le code précédent :
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;
- Ce curseur est définit dans la proc de restitution 1
- P_LANGUE permet de choisir la langue de restitution
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;
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
mais cela ne marche pas.
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')
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
Partager