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
j'arrive à parcourir mon tableau d'enregistrement via result.
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;
par contre qd je fais directement ca :
j'ai l'erreur :
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));
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 ORA-22905 : cannot access rows from a non nested table item
meme resultat ;
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));
ma procédure retourne un tableau d'enregistrement definit comme ceci :
ma function oracle req_prec_med retourne un element de type tbl_C
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;
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
Partager