Bonjour a tous,

Je voudrais savoir si l'utilisation de "cast" peut se faire sur la 8i et si cette opération est forcément liée à un pipelined ???
je m'explique , j'ai une fonction oracle qui retourne un tableau d'enregistrement.
quand je fais
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
Declare
Result PCK_DXPHARM_PLUS.tbl_C;
Begin
 
Result := pck_dxpharm_plus.req_presc_med(200510211400, 200509091400, 200510221400, 200510181724, 'AVL,ACP,EQN,SUB,NSO,REF,NDI', 181, 95);
Dbms_output.put_line(' reste Disp ='||Result(0).qttreste_disp||' qttreste='||Result(0).qttreste||' qttrea='||Result(0).qttrea||' dem_disp='||Result(0).qttdem_disp||' rea_disp='||Result(0).qttrea_disp||' rea_trunc='||Result(0).qttrea_trunc||' restera='||Result(0).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(1).qttreste_disp||' qttreste='||Result(1).qttreste||' qttrea='||Result(1).qttrea||' dem_disp='||Result(1).qttdem_disp||' rea_disp='||Result(1).qttrea_disp||' rea_trunc='||Result(1).qttrea_trunc||' restera='||Result(1).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(2).qttreste_disp||' qttreste='||Result(2).qttreste||' qttrea='||Result(2).qttrea||' dem_disp='||Result(2).qttdem_disp||' rea_disp='||Result(2).qttrea_disp||' rea_trunc='||Result(2).qttrea_trunc||' restera='||Result(2).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(3).qttreste_disp||' qttreste='||Result(3).qttreste||' qttrea='||Result(3).qttrea||' dem_disp='||Result(3).qttdem_disp||' rea_disp='||Result(3).qttrea_disp||' rea_trunc='||Result(3).qttrea_trunc||' restera='||Result(3).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(4).qttreste_disp||' qttreste='||Result(4).qttreste||' qttrea='||Result(4).qttrea||' dem_disp='||Result(4).qttdem_disp||' rea_disp='||Result(4).qttrea_disp||' rea_trunc='||Result(4).qttrea_trunc||' restera='||Result(4).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(5).qttreste_disp||' qttreste='||Result(5).qttreste||' qttrea='||Result(5).qttrea||' dem_disp='||Result(5).qttdem_disp||' rea_disp='||Result(5).qttrea_disp||' rea_trunc='||Result(5).qttrea_trunc||' restera='||Result(5).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(6).qttreste_disp||' qttreste='||Result(6).qttreste||' qttrea='||Result(6).qttrea||' dem_disp='||Result(6).qttdem_disp||' rea_disp='||Result(6).qttrea_disp||' rea_trunc='||Result(6).qttrea_trunc||' restera='||Result(6).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(7).qttreste_disp||' qttreste='||Result(7).qttreste||' qttrea='||Result(7).qttrea||' dem_disp='||Result(7).qttdem_disp||' rea_disp='||Result(7).qttrea_disp||' rea_trunc='||Result(7).qttrea_trunc||' restera='||Result(7).qttrestera);
Dbms_output.put_line(' reste Disp ='||Result(8).qttreste_disp||' qttreste='||Result(8).qttreste||' qttrea='||Result(8).qttrea||' dem_disp='||Result(8).qttdem_disp||' rea_disp='||Result(8).qttrea_disp||' rea_trunc='||Result(8).qttrea_trunc||' restera='||Result(8).qttrestera);
-- est ce que l'on type les valeurs a recupérer comme etant des entiers ou des réels ???
End;
j'arrive à parcourir mon tableau d'enregistrement via result.

par contre qd je fais directement ca :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
select * from table (PCK_DXPHARM_PLUS.req_presc_med(200510211400, 200509091400, 200510221400, 200510181724, 'AVL,ACP,EQN,SUB,NSO,REF,NDI', 181, 95));
j'ai l'erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ORA-22905 : cannot access rows from a non nested table item
et lisant les posts du forum j'ai lu que cette erreur etait lié au fait de ne pas utiliser la fonction "cast " j'ai ressayé en castant mon appelle de procédure comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
select * from table (cast(PCK_DXPHARM_PLUS.req_presc_med(200510211400, 200509091400, 200510221400, 200510181724, 'AVL,ACP,EQN,SUB,NSO,REF,NDI', 181, 95)as PCK_DXPHARM8PLUS.tbl_C));
meme resultat ;

ma procédure retourne un tableau d'enregistrement definit comme ceci :

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
TYPE rec_C IS RECORD
	(
      nisejour       PENSOINS.ACTIVITE.NISEJOUR%TYPE,
      nipresc        PENSOINS.ACTIVITE.NIPRESC%TYPE,
      qttdem         PENSOINS.ACTIVITE.QUANTITE%TYPE,
	  niuf_heb       NUMBER,
	  idpatient      PENSOINS.SEJOUR.NIPATIENT%TYPE,
	  nom_pat        PENSOINS.PATIENT.NOM%TYPE,
	  prn_pat        PENSOINS.PATIENT.PRENOM%TYPE,
	  nip            PENSOINS.PATIENT.NIP%TYPE,
 
	  lib_presc      PENSOINS.PRESC.LIBELLE%TYPE,
	  nimed          PENSOINS.PRESC.NI%TYPE,
	  frzjour        PENSOINS.PRESC.FRZJOUR%TYPE,
	  frzheure       PENSOINS.PRESC.FRZHEURE%TYPE,
	  type_presc     PENSOINS.PRESC.TYPE%TYPE,
	  quantite       PENSOINS.PRESC.QUANTITE%TYPE,
	  commentair     PENSOINS.PRESC.COMMENTAIR%TYPE,
	  lib_unitpresc  PENSOINS.C_UNITEPRESC.LIBELLE%TYPE,
	  abg_unitpresc  PENSOINS.C_UNITEPRESC.ABREGE%TYPE,
	  lib_voie       PENSOINS.C_VOIEADM.LIBELLE%TYPE,
	  nbjour         PENSOINS.PRESC.NBJOUR%TYPE,
	  urgence        PENSOINS.PRESC.URGENCE%TYPE,
	  demande        PENSOINS.PRESC.DEMANDE%TYPE,
	  stat           PENSOINS.AVS_PHR.STAT%TYPE,
	  com            PENSOINS.AVS_PHR.COM%TYPE,
	  coef_presc     PENSOINS.C_MEDUNIT.COEF%TYPE,
 
	  coef_disp      PENSOINS.C_MEDUNIT.COEF%TYPE,
	  codecip        PENSOINS.C_PRESENTATION.CODECIP%TYPE,
	  coef           NUMBER,
	  niprod         PHARM.PHR_PRODUIT.NIPRODUIT%TYPE,
	  codeb          PHARM.PHR_PRODUIT.CODE%TYPE,
	  distrib        PENSOINS.C_SPECIALITE.DISTRIB%TYPE,
	  fraction       PENSOINS.C_SPECIALITE.FRACTION%TYPE,
 
      qttreste_disp  NUMBER,
      qttreste       NUMBER,
      qttrea         NUMBER,
      qttdem_disp    NUMBER,
      qttrea_disp    NUMBER,
      qttrea_trunc   NUMBER,
      qttrestera     NUMBER
	);
 
TYPE tbl_C IS TABLE OF rec_C INDEX BY BINARY_INTEGER;
ma function oracle req_prec_med retourne un element de type tbl_C


QQUN à une idée comment récupérer le resultat de cet élément en un seule requete sans passer par "declare ....." ???

PS: Travail version oracle 8i