Bonjour,

voila mon probleme :
j'essaie de créer sous SQLPLUS une FONCTION qui utilise un curseur nommée c_A;

Lorsque je creer cette function sans le curseur , SQL PLUS me retourne le message fonction créée.
Lorsque je recréeer cette function avec le curseur SQLPLUS me retourne le message d'erreur suivant :
fonction créer avec erreur de compilation

voici la fameuse méthode :

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
CREATE OR REPLACE FUNCTION REQ_PRESC_INJ (	p_niufGest      IN INTEGER,
											p_niuf    		IN INTEGER,
                           					p_aujourd_hui   IN INTEGER,
                          					p_datedeb       IN INTEGER,
                           					p_datefin 	    IN INTEGER,
                           					p_datelast      IN INTEGER,
											p_datenext      IN INTEGER					   					   
										)return tbl_D_inj
  IS
 
  	-----------------------------------------------------------------------------------------
 
 
	l_nipresc    		NUMBER(7);
    l_nimed      		NUMBER(7);
	l_lib_comp_inj  	VARCHAR2(105);
	l_solvant       	CHAR(1);
	l_code_unit_presc 	NUMBER(6);
	l_libvoie			VARCHAR2(40);
	l_code_voieadm    	VARCHAR2(8);
	l_qttinj			NUMBER(10,2);				
    l_posoinj			NUMBER(13,3);
	l_posoinj_totale	NUMBER(13,2);
	l_type_inj			NUMBER(2);
	l_typ_rap			NUMBER(1);
	l_rap_gab			NUMBER(1);
	l_rap_tmp			NUMBER(1);
	l_type_adm			NUMBER(1);
	l_duree				NUMBER(4);
	l_voldil			NUMBER(6,1);
 
	l_recA_inj rec_A_inj := rec_A_inj(	null,null,null,null,
										null,null,null,null,
										null,null,null,null,
										null,null,null,null,
										null);
 
	l_tblA_inj tbl_A_inj := tbl_A_inj(l_recA_inj);
 
	a PLS_INTEGER;
	nbrA INTEGER;
 
   -- VEEEEEEEEERRRRIFFFFFFFFFFFFFFFFFFFFFFFF OOOOOOOOOOOOKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
   -- ajout des droits select pour les tables c_voie_inj,perfdet et pr_prf to pharm 
 
   CURSOR c_A (c_datenext NUMBER) 
    IS
      SELECT	PPD.NIPRESC,
				PPD.NIMED,
				PPD.LIBELLE	LIB_COMP_INJ,
				PPD.CMP_SLV SOLVANT,
				PCK_DXPHARM.GETUNITEPRESC(PPD.NIMED,
											PPD.CMP_SLV,
											PPD.UNITEPRESCT)	CODE_UNITPRESC,
				PCVI.LIBELLE	LIB_VOIE,
				PCVI.CODE		CODE_VOIEADM,
				PCK_DXPHARM.CALCQTTINJ(	PPD.QUANTITE,
										PPD.QUANTITE_TOTALE,
										PPR.TYP_INJ_IDE,
										PPR.TYP_ADM,
										PPD.RAP_GAB,
										PPD.RAP_TMP,
										PPD.NIPRESC,
										c_datenext,
									    PPR.VOLUME_TOTAL_DILUTION,
										PPD.CMP_SLV)	QTTINJ,
				PPD.QUANTITE POSOINJ,
				PPD.QUANTITE_TOTALE POSOINJ_TOTALE,
				PPR.TYP_INJ_IDE	TYPE_INJ,
				PPD.TYP_RAP,
				PPD.RAP_GAB,
				PPD.RAP_TMP,
				PPR.TYP_ADM,
				PPR.DUREE,
				PPR.VOLUME_TOTAL_DILUTION VOLDIL
      FROM		PENSOINS.PERFDET PPD,
				PENSOINS.PR_PRF PPR,
				PENSOINS.C_VOIE_INJ PCVI
      WHERE		 PPD.NIMED > 0 
				 and PPD.NIPRESC = PPR.NIPRESC 
				 and    PPR.VOIE_IDE = PCVI.NI(+) 
				 and    PPR.TYP_INJ_IDE = PCVI.TYP_INJ_IDE(+) 
				 and    PCVI.RETRAIT(+) = 'F'
    ;
l_tblD_inj tbl_D_inj;
begin
return l_tblD_inj;
end;
/
le plus bizarre c'est que qd je créer un bloc SQL sous Toad avec ce curseur sa fonctionne très bien !!???

et quand j'execute la requete directement sous Toad en remplacant une valeur de c_datenext cela fonctionne ossi très bien

Est ce que qqun aurait une idée ???
merci d'avance...