Bonjour,

J'ai une procédure PL/SQL sous Oracle 10g avec en paramètre d'entrée 2 dates et en paramètre in/out un objet de type curseur.

Ma procédure fait un update sur les ligne d'une table et en flag certaines à 1.
J'aimerai que mon curseur prenne toutes les lignes à 1 et soit renvoyé en tant que paramètre de sortie de ma procédure.

J'ai donc fait un package pour définir mon type CURSOR comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
CREATE OR REPLACE PACKAGE cursor_def AS
TYPE CatCurTyp IS REF CURSOR RETURN
all_objects%ROWTYPE;
END cursor_def;
Puis voici ma 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
47
48
49
50
51
REATE OR REPLACE PROCEDURE FIBO.VERS_FSE_DGD (date1 IN DATE,date2 IN DATE, bo_cursor IN OUT cursor_def.CatCurTyp) 
IS 
 
 
CURSOR mdt_lib_bc1 
   IS 
      SELECT code_oper,lib_mdt 
      FROM bo_vers_fse_dgd 
      WHERE lib_mdt LIKE '%DGD%' AND (lib_mdt LIKE '%BC1%' OR lib_mdt LIKE '%BC 1%') 
      AND dtmand BETWEEN  date1 AND date2; 
 
CURSOR mdt_lib_bc2 
   IS 
      SELECT code_oper 
      FROM bo_vers_fse_dgd 
      WHERE lib_mdt LIKE '%DGD%' AND (lib_mdt LIKE '%BC2%' OR lib_mdt LIKE '%BC 2%') 
      AND dtmand BETWEEN  date1 AND date2; 
 
BEGIN 
 
UPDATE bo_vers_fse_dgd 
SET flag = NULL; 
 
 
FOR mdt IN mdt_lib_bc1 
LOOP 
 
UPDATE bo_vers_fse_dgd 
SET flag = 1 
WHERE 
code_oper = mdt.code_oper 
AND (lib_mdt LIKE '%BC1%' OR lib_mdt LIKE '%BC 1%'); 
 
END LOOP; 
commit;
FOR mdt2 IN mdt_lib_bc2 
LOOP 
 
 
UPDATE bo_vers_fse_dgd 
SET flag = 1 
WHERE 
code_oper = mdt2.code_oper 
AND (lib_mdt LIKE '%BC2%' OR lib_mdt LIKE '%BC 2%'); 
END LOOP; 
commit;
 
OPEN bo_cursor FOR SELECT * FROM bo_vers_fse_dgd WHERE flag = 1;
 
 
END;
Or il me plante à la compilation de la procédure sur le remplissage du curseur bo_cursor sur la ligne qui commence par "OPEN bo_cursor ..." avec l'erreur suivante : "PLS-00382: expression du mauvais type"

On dirait que l'expression "Select ..." n'est pas du bon type, enfin je ne comprends pas trop.

Si quelqu'un a une idée ou une piste pour me débloquer, ce serait super sympa.
Merci par avance.