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 :
Puis voici ma procédure :
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;
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"
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;
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.
Partager