IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Utilisation de cast sans pipelined


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut [Resolu] Utilisation de cast sans pipelined
    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

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Pour interroger une collection depuis le SQL, il faut utiliser l'opérateur TABLE (mais dans ce cas , il s'agit de NESTED TABLE et pas de INDEX BY TABLE)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    Oki merci c'est super sympa, je voir ca merci ;-)

  4. #4
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    meme en enlevant index by integer il me laisse la meme erreur...

    Une autre idée ??

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Je ne comprends pas votre problème. Je vous ai indiqué un lien vers un article qui démontrer la gestion d'un jeu d'enregistrements provenant d'une fonction avec les méthode d'appel Sql et java.

    Que vous faut-il de plus ??
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  6. #6
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut explication
    voila ou j'en suis,
    la function qui me retourne ma table d'enregistrement fonctionne correctement puis que j'arrive à explorer cette table depuis oracle , le problème c'est que l'appel depuis vb.net comme le montre le lien que vous m'avez indiquez me genere une erreur, le lien faisait executer la requête SQL suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table(ret_cur) where deptno=10;
    seulement quand j'adapte cette requete à ma fonction (et pas procédure )req_prec_med il me genere l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA 22905 : cannot access rows from non tested table
    Vous m'avez par la suite que c'etait du à un indexage par binary integer je les ai enlever de la délcaration de mes types et ca me genere la même erreur.

    La seul différence notable entre l'exemple du lien et le mien c'est que le type declaré comme etant le type des éléments contenu dans la table est
    Create or replace type typ_rec_emp AS OBJECT

    et que le mien est :
    TYPE rec_C IS RECORD

    est ce que je suis obligé de faire un create or replace si je déclare mon type dans un package , a priori non.

    Autre problème j'ai essayer de remplacer dans ma spécification de package le IS RECORD par AS OBJECT et j'ai eu l'erreur suivante :
    PLS-00540: object not supported in this context.

    a priori je dois le declare dans ma function le problème c'est qu'après pour spécifier la signature de ma function qui return un tableau de ce type la , j'ai besoin de le declarer ossi dans la spec donc je ne sais plus quoi faire ...

    Est ce que tous ces soucis sont du au fait que je travaille en 8i ??
    Est t-il possible de déclarer un type comme etant object à l'interieur du body d'un package ou d'une fonction sans ecrire CREATE OR REPLACE par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE rec_C AS OBJECT (.....)
    En gros je veux pas exécuter directement sur ma base le create OR replace type ....; AS OBJECT est ce possible ?

    J'espere qu ce post vous eclairera plus, desolé si je n'ai pas été clair auparavant ....
    Je vous avoueraie que je suis bloquer, votre aide serait précisieuse
    MErci

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Les types objets doivent être créés dans la base, pas au niveau de votre code PL/SQL.

    Lancez Toad ou Sql*Plus, créez votre objet : CREATE OR REPLACE TYPE ... AS OBJECT(...)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    merci bcp
    j'ai creer mes type directement sous sql plus et executant les requetes

    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 tbl_C));
    ou

    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 toujours cette même erreur :
    ORA 22905 : cannot access row from a non-nested table

    JE NE COMPREND PAS PKOI .....
    est ce que je peux faire un select avec req_presc_med si c'est une function et non pas un procédure sinon comment puis je faire ??


    J'ai essayer avec les procédures mais qd je declare mon champ de retour
    OUT tbl_C il me dit que ce type doit être déclaré alors qu'il fait parti de ce que j'ai déclarer dans SQL PLUS , que faire ???
    merci

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Voici un extrait du lien.....

    Function that returns a NESTED table


    q The database types:





    drop type TYP_TAB_REC_EMP
    /
    drop type TYP_REC_EMP
    /
    create or replace type TYP_REC_EMP as object
    (
    EMPNO NUMBER(4),
    ENAME VARCHAR2(10),
    JOB VARCHAR2(10),
    MGR NUMBER(4),
    HIREDATE DATE,
    SAL NUMBER(7,2),
    COMM NUMBER(7,2),
    DEPTNO NUMBER(2)
    )
    /
    create or replace type TYP_TAB_REC_EMP is table of TYP_REC_EMP

    /






    q The function:





    CREATE OR REPLACE function ret_cur return TYP_TAB_REC_EMP

    Is

    tab TYP_TAB_REC_EMP := TYP_TAB_REC_EMP(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

    Cursor C_EMP is

    Select *

    From EMP ;

    i pls_integer := 0 ;

    Begin



    For CEMP in C_EMP Loop

    tab.extend ;

    i := i + 1 ;

    tab(i) := TYP_REC_EMP(CEMP.EMPNO,CEMP.ENAME,CEMP.JOB,CEMP.MGR,CEMP.HIREDATE,CEMP.SAL,CEMP.COMM,CEMP.DEPTNO);

    End loop ;



    return tab ;



    End;

    /








    q The client side request:



    Sql*Plus, Forms



    SQL> set linesize 200
    SQL> select * from table(ret_cur) where deptno=10 ;

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    ---------- ---------- ---------- ---------- -------- ---------- --------------------
    7782 CLARK MANAGER 7839 09/06/81 2450 10
    7839 KING PRESIDENT 17/12/80 5000 10
    7934 MILLER CLERK 7782 09/12/82 1301 10



    SQL>
    Cette fois, cela devrait aller.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  10. #10
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    ca ne fonctionne pas toujours la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cannot access rows from a non-tested table item.
    voila les scripts que j'ai utilisés et pour chaque type et la function final sql plus me marque creer avec erreur de compilation

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    CREATE OR REPLACE TYPE rec_A AS OBJECT
    	(
         	  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  
    	)
    /
     
    CREATE OR REPLACE TYPE tbl_A IS TABLE OF rec_A 
    /
     
    CREATE OR REPLACE TYPE rec_B 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
    	)
    /
    CREATE OR REPLACE TYPE tbl_B IS TABLE OF rec_B
    /
    CREATE OR REPLACE TYPE rec_C AS OBJECT 
    	(
          	  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  INTEGER,
              qttreste       INTEGER,
              qttrea         INTEGER,
              qttdem_disp    INTEGER,
              qttrea_disp    INTEGER,
              qttrea_trunc   INTEGER,
              qttrestera     INTEGER
    	)
    /
    CREATE OR REPLACE TYPE tbl_C IS TABLE OF rec_C
    /
    CREATE OR REPLACE FUNCTION REQ_PRESC_MED ( p_datedeb    IN INTEGER,
                               		   p_datelast    IN INTEGER,
                              		   p_datenext    IN INTEGER,
                               		   p_aujourd_hui IN INTEGER,
                               		   p_typaff      IN VARCHAR2,
    					   p_niuf        IN INTEGER,
    					   p_niufGest    IN INTEGER
    					 )return tbl_C
      IS
     
      	---------------------------------------------------
     
    	l_nisejour   PENSOINS.ACTIVITE.NISEJOUR%TYPE;
        l_nipresc    PENSOINS.ACTIVITE.NIPRESC%TYPE;
        l_qttdem     PENSOINS.ACTIVITE.QUANTITE%TYPE;
    	l_niuf_heb   NUMBER;
    	l_idpatient  PENSOINS.SEJOUR.NIPATIENT%TYPE;
     
     
    	l_tblA tbl_A := tbl_A(null,null,null,null,
    		   		 		  null,null,null,null);
    	a    INTEGER;
    	nbrA INTEGER;
     
        CURSOR c_A (c_datedeb  INTEGER,
                    c_datenext INTEGER)
        IS
          SELECT   PA.NISEJOUR,
                   PA.NIPRESC,
    	           NVL(SUM(PA.QUANTITE),0) QTTDEM 
          FROM     PENSOINS.ACTIVITE PA 
          WHERE    (PA.STATUT=1 or PA.STATUT=4) 
          AND      NOT EXISTS (SELECT 1 
                               FROM   PHR_ACTIVITES PACT 
    				           WHERE  PACT.NIACTIVITE = PA.NIACTIVITE 
    				           AND    ROWNUM = 1
    				          ) 
          AND      PA.DATEHEURE BETWEEN c_datedeb and c_datenext 
          GROUP BY PA.NISEJOUR, PA.NIPRESC
        ;
     
    	l_nom_ufheb  PENSOINS.EJ_UF.NOM%TYPE;
    	l_code_ufheb PENSOINS.EJ_UF.CODE%TYPE;
     
    	CURSOR c_findUF (c_niuf INTEGER)
    	IS
    	  SELECT NOM, CODE FROM PENSOINS.EJ_UF WHERE NIUF = c_niuf
    	;
     
    	CURSOR c_findPATIENT (c_nipatient INTEGER)
    	IS
    	  SELECT NOM, PRENOM, NIP FROM PENSOINS.PATIENT WHERE NIPATIENT = c_nipatient
    	;
     
     
     
    	------------------------------------------------------------------------
     
    	l_lib_presc      PENSOINS.PRESC.LIBELLE%TYPE;
    	l_nimed          PENSOINS.PRESC.NI%TYPE;
    	l_frzjour        PENSOINS.PRESC.FRZJOUR%TYPE;
    	l_frzheure       PENSOINS.PRESC.FRZHEURE%TYPE;
    	l_type_presc     PENSOINS.PRESC.TYPE%TYPE;
    	l_quantite       PENSOINS.PRESC.QUANTITE%TYPE;
    	l_commentair     PENSOINS.PRESC.COMMENTAIR%TYPE;
    	l_lib_unitpresc  PENSOINS.C_UNITEPRESC.LIBELLE%TYPE;
    	l_abg_unitpresc  PENSOINS.C_UNITEPRESC.ABREGE%TYPE;
    	l_lib_voie       PENSOINS.C_VOIEADM.LIBELLE%TYPE;
    	l_nbjour         PENSOINS.PRESC.NBJOUR%TYPE;
    	l_urgence        PENSOINS.PRESC.URGENCE%TYPE;
    	l_demande        PENSOINS.PRESC.DEMANDE%TYPE;
    	l_stat           PENSOINS.AVS_PHR.STAT%TYPE;
    	l_com            PENSOINS.AVS_PHR.COM%TYPE;
    	l_coef_presc     PENSOINS.C_MEDUNIT.COEF%TYPE;
     
    	l_tblB tbl_B := tbl_B(null,null,null,null,null,null,
    		   		   		 null,null,null,null,null,null,
    						 null,null,null,null,null,null,
    						 null,null,null,null,null,null);
    	b    INTEGER;
    	nbrB INTEGER;
     
    	CURSOR c_B (c_nipresc  PENSOINS.PRESC.NIPRESC%TYPE,
                    c_typaff   VARCHAR2)
        IS
          SELECT PP.LIBELLE LIB_PRESC,
    	         PP.NI NIMED,
    	         PP.FRZJOUR,
    	         PP.FRZHEURE,
    	         PP.TYPE TYPE_PRESC,
    	         PP.QUANTITE,
    	         PCK_DXPHARM.ExistMemoEdite(c_nipresc) COMMENTAIR,
    	         PCU.LIBELLE  LIB_UNITPRESC,
    	         PCU.ABREGE   ABG_UNITPRESC,
    	         PCV.LIBELLE  LIB_VOIE,
    	         PP.NBJOUR,
    	         PP.URGENCE,
    	         PP.DEMANDE,
    	         PAP.STAT,
    	         PAP.COM,
    	         PCM.COEF              COEF_PRESC
    	  FROM   PENSOINS.PRESC        PP,
    	         PENSOINS.C_UNITEPRESC PCU,
    	         PENSOINS.C_MEDUNIT    PCM,
    	         PENSOINS.C_VOIEADM    PCV, 
    	         PENSOINS.AVS_PHR      PAP
          WHERE  PP.NIPRESC  = c_nipresc
    	  AND    PAP.NIPRESC = PP.NIPRESC
          --AND    PP.STATUT IN ('EC') 
          --AND  PAP.STAT IN ('AVL', 'ACP', 'EQN', 'SUB', 'NSO', 'REF', 'NDI')
          AND    PP.STATUT = 'EC'
          AND    F_IN(PAP.STAT, c_typaff) = 'T'
          AND    PCK_DXPHARM.AnalyseStatutPresc(PAP.NIPRESC, PAP.STAT) = 'T' 
          AND    PP.UNITEPRESCT = PCU.NIUNIT(+) 
          AND    PP.NI = PCM.NIMED(+) 
          AND    PP.UNITEPRESCT = PCM.NIUNIT(+)
          AND    PP.VOIEADMT = PCV.NI(+)
          AND    PP.DEMANDE='F'
        ;
     
    	----------------------------------------------------------------------------
     
    	l_coef_disp      PENSOINS.C_MEDUNIT.COEF%TYPE;
    	l_codecip        PENSOINS.C_PRESENTATION.CODECIP%TYPE;
    	l_coef           NUMBER;
    	l_niprod         PHARM.PHR_PRODUIT.NIPRODUIT%TYPE;
    	l_codeb          PHARM.PHR_PRODUIT.CODE%TYPE;
    	l_distrib        PENSOINS.C_SPECIALITE.DISTRIB%TYPE;
    	l_fraction       PENSOINS.C_SPECIALITE.FRACTION%TYPE;
     
    	l_tblC tbl_C := tbl_C(null,null,null,null,null,null,
    		   		 		  null,null,null,null,null,null,
    						  null,null,null,null,null,null,
    						  null,null,null,null,null,null,
    						  null,null,null,null,null,null,
    						  null,null,null,null,null,null,
    						  null,null);
    	c    INTEGER;
    	nbrC INTEGER;
     
    	CURSOR c_C (c_coef_presc PENSOINS.C_MEDUNIT.COEF%TYPE,
    	            c_nimed      PENSOINS.PRESC.NI%TYPE,
    				c_niuf       PENSOINS.EJ_UF.NIUF%TYPE,
    				c_niufGest   PENSOINS.EJ_UF.NIUF%TYPE)
        IS
          SELECT
                 PCM.COEF COEF_DISP,
    	         PCP.CODECIP,
    	         round(decode(PCM.COEF, null, c_coef_presc, 0, c_coef_presc, PCM.COEF / c_coef_presc), 5) COEF,
    	         PPROD.NIPRODUIT NIPROD,
    	         PPROD.CODE CODEB,
    	         PCS.DISTRIB,
    	         PCS.FRACTION
    	  FROM   PENSOINS.C_MEDUNIT PCM,
    	         PENSOINS.C_UNITEPRESC PCU,
    	         PHARM.PHR_PRODUIT PPROD,
    	         PENSOINS.C_PRESENTATION PCP, 
    	         PENSOINS.C_SPECIALITE PCS
          WHERE  c_nimed = PCM.NIMED(+) 
    	  AND    PCM.DISP(+) = 'T'
          AND    PCM.NIUNIT = PCU.NIUNIT(+)
          AND    PCM.RETRAIT = 'F' 
          AND    PCU.RETRAIT = 'F' 
          AND    c_nimed = PPROD.NIREF(+) 
          AND    PPROD.NITYPE = 1
          AND    PPROD.NIPRES = PCP.NIPRES(+)
          AND    c_nimed = PCS.NIMED(+) 
          AND    PCS.TRANSMIS = 'T'
        ;
     
      BEGIN
     
        DBMS_OUTPUT.PUT_LINE('REQ_PRESC_MED: IN');
     
        -- UF parameters
    	OPEN  c_findUF(p_niuf);
    	FETCH c_findUF INTO l_nom_ufheb, l_code_ufheb;
    	CLOSE c_findUF;
     
        -- First query (A)
        a := 0;
        OPEN c_A (p_datedeb, p_datenext);
        LOOP
          FETCH c_A INTO l_nisejour, 
    	                 l_nipresc, 
    					 l_qttdem;
          EXIT WHEN c_A%NOTFOUND;
     
    	  l_tblA(a).nisejour := l_nisejour;
    	  l_tblA(a).nipresc  := l_nipresc;
    	  l_tblA(a).qttdem   := l_qttdem;
     
    	  -- Gets niuf and nipatient
    	  IF a = 0 THEN
    	    l_tblA(a).niuf_heb  := PCK_DXPHARM.GETUFHEBERGE(l_tblA(a).nisejour);
    		l_tblA(a).idpatient := PCK_DXPHARM.GETNIPATIENT(l_tblA(a).nisejour);
     
    		OPEN  c_findPATIENT(l_tblA(a).idpatient);
    		FETCH c_findPATIENT INTO l_tblA(a).nom_pat, l_tblA(a).prn_pat, l_tblA(a).nip;
    		CLOSE c_findPATIENT;
     
    	  ELSE
    	    IF (l_tblA(a).nisejour <> l_tblA(a - 1).nisejour) THEN
    		  l_tblA(a).niuf_heb  := PCK_DXPHARM.GETUFHEBERGE(l_tblA(a).nisejour);
    		  l_tblA(a).idpatient := PCK_DXPHARM.GETNIPATIENT(l_tblA(a).nisejour);
     
    		  OPEN  c_findPATIENT(l_tblA(a).idpatient);
    		  FETCH c_findPATIENT INTO l_tblA(a).nom_pat, l_tblA(a).prn_pat, l_tblA(a).nip;
    		  CLOSE c_findPATIENT;
     
    		ELSE
    		  l_tblA(a).niuf_heb  := l_tblA(a - 1).niuf_heb;
    	      l_tblA(a).idpatient := l_tblA(a - 1).idpatient;
    		  l_tblA(a).nom_pat   := l_tblA(a - 1).nom_pat;
    		  l_tblA(a).prn_pat   := l_tblA(a - 1).prn_pat;
    		  l_tblA(a).nip       := l_tblA(a - 1).nip;
    		END IF;
    	  END IF;
     
          --DBMS_OUTPUT.PUT_LINE('A['||a||']<'||l_tblA(a).nisejour||'><'||l_tblA(a).nipresc||'><'||l_tblA(a).qttdem||'><'||l_tblA(a).niuf_heb||'><'||l_tblA(a).idpatient||'>');
     
    	  a := a + 1;
    	END LOOP;
        CLOSE c_A;
    	nbrA := a;
    	--DBMS_OUTPUT.PUT_LINE('nbrA = '||nbrA);
     
    	-- Second query (B)
    	a := 0;
    	b := 0;
    	FOR a IN 0 ..  (nbrA - 1)
    	LOOP
    	  --DBMS_OUTPUT.PUT_LINE('<'||l_tblA(a).nipresc||'><'||l_tblA(a).niuf_heb||'><'||p_niuf||'>');
    	  IF (l_tblA(a).niuf_heb = p_niuf)
    	  THEN
    	    OPEN c_B(l_tblA(a).nipresc, p_typaff);
    	    LOOP
    		  FETCH c_B INTO l_lib_presc, 
    		                 l_nimed,
    			     		 l_frzjour,
    					     l_frzheure,
    					     l_type_presc,
    					     l_quantite,
    					     l_commentair,
    					     l_lib_unitpresc,
    					     l_abg_unitpresc,
    					     l_lib_voie,
    					     l_nbjour,
    					     l_urgence,
    					     l_demande,
    					     l_stat,
    					     l_com,
    					     l_coef_presc;
    		  EXIT WHEN c_B%NOTFOUND;
     
    		  l_tblB(b).nisejour      := l_tblA(a).nisejour;
    		  l_tblB(b).nipresc       := l_tblA(a).nipresc;
    		  l_tblB(b).qttdem        := l_tblA(a).qttdem;
    		  l_tblB(b).niuf_heb      := l_tblA(a).niuf_heb;
    		  l_tblB(b).idpatient     := l_tblA(a).idpatient;
    		  l_tblB(b).lib_presc     := l_lib_presc;
    	      l_tblB(b).nimed         := l_nimed;
    	      l_tblB(b).frzjour       := l_frzjour;
    	      l_tblB(b).frzheure      := l_frzheure;
    	      l_tblB(b).type_presc    := l_type_presc;
    	      l_tblB(b).quantite      := l_quantite;
    	      l_tblB(b).commentair    := l_commentair;
    	      l_tblB(b).lib_unitpresc := l_lib_unitpresc;
    	      l_tblB(b).abg_unitpresc := l_abg_unitpresc;
    	      l_tblB(b).lib_voie      := l_lib_voie;
    	      l_tblB(b).nbjour        := l_nbjour;
    	      l_tblB(b).urgence       := l_urgence;
    		  l_tblB(b).demande       := l_demande;
    		  l_tblB(b).stat          := l_stat;
    	      l_tblB(b).com           := l_com;
    	      l_tblB(b).coef_presc    := l_coef_presc;
     
    	      --DBMS_OUTPUT.PUT_LINE('B['||b||']<'||l_tblB(b).nisejour||'><'||l_tblB(b).nipresc||'><'||l_tblB(b).qttdem||'><'||l_tblB(b).lib_presc||'><'||l_tblB(b).niuf_heb||'><'||l_tblB(b).idpatient||'><'||l_tblB(b).nimed);
     
    		  b := b + 1;
    	    END LOOP;
    	    CLOSE c_B;
    	  END IF;
        END LOOP;
    	nbrB := b;
    	DBMS_OUTPUT.PUT_LINE('nbrB = '||nbrB);
     
    	-- Third query (C)
    	b := 0;
    	c := 0;
    	FOR b IN 0 ..  (nbrB - 1)
    	LOOP
    	--  DBMS_OUTPUT.PUT_LINE('<'||l_tblB(b).coef_presc||'><'||l_tblB(b).nimed||'><'||l_tblB(b).niuf_heb||'><'||p_niufGest||'>');
     
          IF (PCK_DXPHARM.AnalyseTypeDot(l_tblB(b).nimed, p_niufGest, l_tblB(b).niuf_heb) = 'T')
          THEN
            OPEN c_C(l_tblB(b).coef_presc,
    	             l_tblB(b).nimed,
    	             l_tblB(b).niuf_heb,
    			     p_niufGest);
    		LOOP
    		  FETCH c_C INTO l_coef_disp,
    	                     l_codecip,
    	                     l_coef,
    	                     l_niprod,
    	                     l_codeb,
    	                     l_distrib,
    	                     l_fraction;
    		  EXIT WHEN c_C%NOTFOUND;
              --DBMS_OUTPUT.PUT_LINE('tata');
             -- DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).nisejour||'><'||l_tblC(c).nipresc||'><'||l_tblC(c).qttdem||'><'||l_tblC(c).lib_presc||'><'||l_tblC(c).nimed||'><'||l_tblC(c).qttreste_disp||'>');
     
    		  l_tblC(c).nisejour      := l_tblB(b).nisejour;
    		  l_tblC(c).nipresc       := l_tblB(b).nipresc;
    		  l_tblC(c).qttdem        := l_tblB(b).qttdem;
    		  l_tblC(c).niuf_heb      := l_tblB(b).niuf_heb;
    		  l_tblC(c).idpatient     := l_tblB(b).idpatient;
    	      l_tblC(c).lib_presc     := l_tblB(b).lib_presc;
    	      l_tblC(c).nimed         := l_tblB(b).nimed;
    	      l_tblC(c).frzjour       := l_tblB(b).frzjour;
    	      l_tblC(c).frzheure      := l_tblB(b).frzheure;
    	      l_tblC(c).type_presc    := l_tblB(b).type_presc;
    	      l_tblC(c).quantite      := l_tblB(b).quantite;
    	      l_tblC(c).commentair    := l_tblB(b).commentair;
    	      l_tblC(c).lib_unitpresc := l_tblB(b).lib_unitpresc;
    	      l_tblC(c).abg_unitpresc := l_tblB(b).abg_unitpresc;
    	      l_tblC(c).lib_voie      := l_tblB(b).lib_voie;
    	      l_tblC(c).nbjour        := l_tblB(b).nbjour;
    	      l_tblC(c).urgence       := l_tblB(b).urgence;
    	      l_tblC(c).demande       := l_tblB(b).demande;
    	      l_tblC(c).stat          := l_tblB(b).stat;
    	      l_tblC(c).com           := l_tblB(b).com;
    	      l_tblC(c).coef_presc    := l_tblB(b).coef_presc;
    	      l_tblC(c).coef_disp     := l_coef_disp;
    	      l_tblC(c).codecip       := l_codecip;
    	      l_tblC(c).coef          := l_coef;
    	      l_tblC(c).niprod        := l_niprod;
    	      l_tblC(c).codeb         := l_codeb;
    	      l_tblC(c).distrib       := l_distrib;
    	      l_tblC(c).fraction      := l_fraction;
     
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).nisejour||'><'||l_tblC(c).niprod||'><'||l_tblC(c).distrib||'>');
              l_tblC(c).qttreste_disp := calcQTTRESTE(l_tblC(c).nisejour,
                                                      l_tblC(c).niprod,
                                                      l_tblC(c).distrib);
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).nisejour||'><'||l_tblC(c).niprod||'><'||l_tblC(c).distrib||'><'||l_tblC(c).qttreste_disp||'>');
     
              IF    (l_tblC(c).coef = NULL) THEN
                l_tblC(c).qttreste := l_tblC(c).qttreste_disp;
              ELSIF (l_tblC(c).coef = 0) THEN
                l_tblC(c).qttreste := l_tblC(c).qttreste_disp;
              ELSE
                l_tblC(c).qttreste := l_tblC(c).qttreste_disp / l_tblC(c).coef;
              END IF;
     
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).nipresc||'><'||l_tblC(c).qttdem||'><'||p_datelast||'><'||p_aujourd_hui||'><'||p_datedeb||'><'||l_tblC(c).qttreste||'><'||l_tblC(c).distrib||'>');
              l_tblC(c).qttrea := PCK_DXPHARM.CALCQTTGLOB(l_tblC(c).nipresc,
                                                          l_tblC(c).qttdem, 
                                                          p_datelast, 
                                                          p_aujourd_hui,
                                                          p_datedeb, 
                                                          l_tblC(c).qttreste, 
                                                          l_tblC(c).distrib);
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).nipresc||'><'||l_tblC(c).qttdem||'><'||p_datelast||'><'||p_aujourd_hui||'><'||p_datedeb||'><'||l_tblC(c).qttreste||'><'||l_tblC(c).distrib||'><'||l_tblC(c).qttrea||'>');
     
              IF    (l_tblC(c).coef = NULL) THEN
                l_tblC(c).qttdem_disp := l_tblC(c).qttdem;
                l_tblC(c).qttrea_disp := l_tblC(c).qttrea;
              ELSIF (l_tblC(c).coef = 0) THEN
                l_tblC(c).qttdem_disp := l_tblC(c).qttdem;
                l_tblC(c).qttrea_disp := l_tblC(c).qttrea;
              ELSE
                l_tblC(c).qttdem_disp := l_tblC(c).qttdem * l_tblC(c).coef;
                l_tblC(c).qttrea_disp := l_tblC(c).qttrea * l_tblC(c).coef;
              END IF;
     
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).qttrea_disp||'><'||l_tblC(c).fraction||'><'||l_tblC(c).distrib||'><'||p_datedeb||'><'||p_datenext||'><'||l_tblC(c).nipresc||'><'||l_tblC(c).coef||'>');
              l_tblC(c).qttrea_trunc := PCK_DXPHARM.CALCQTTREADISP(l_tblC(c).qttrea_disp, 
                                                                   l_tblC(c).fraction,
                                                                   l_tblC(c).distrib,
                                                                   p_datedeb,
                                                                   p_datenext, 
                                                                   l_tblC(c).nipresc,
                                                                   l_tblC(c).coef);
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).qttrea_disp||'><'||l_tblC(c).fraction||'><'||l_tblC(c).distrib||'><'||p_datedeb||'><'||p_datenext||'><'||l_tblC(c).nipresc||'><'||l_tblC(c).coef||'><'||l_tblC(c).qttrea_trunc||'>');
     
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).qttrea_disp||'><'||l_tblC(c).qttrea_trunc||'><'||l_tblC(c).fraction||'><'||l_tblC(c).distrib||'><'||l_tblC(c).qttreste_disp||'><'||l_tblC(c).qttdem_disp||'>');
              l_tblC(c).qttrestera := PCK_DXPHARM.CALCRESTERA(l_tblC(c).qttrea_disp,
                                                              l_tblC(c).qttrea_trunc, 
                                                              l_tblC(c).fraction,
                                                              l_tblC(c).distrib,
                                                              l_tblC(c).qttreste_disp,
                                                              l_tblC(c).qttdem_disp);
              --DBMS_OUTPUT.PUT_LINE('C['||c||']<'||l_tblC(c).qttrea_disp||'><'||l_tblC(c).qttrea_trunc||'><'||l_tblC(c).fraction||'><'||l_tblC(c).distrib||'><'||l_tblC(c).qttreste_disp||'><'||l_tblC(c).qttdem_disp||'><'||l_tblC(c).qttrestera||'>');
    		  l_tblC.extend;                                                 
    		  c := c + 1;
    		   END LOOP;
    	    CLOSE c_C;
          END IF;
        END LOOP;
    	nbrC := c;
    	--DBMS_OUTPUT.PUT_LINE('nbrC = '||nbrc); 
    -- 	OPEN outCursor FOR
    -- 	SELECT * FROM TABLE(cast(l_tblC) as PCK_DXPHARM_PLUS.rec_C);
    	return l_tblC;
    	DBMS_OUTPUT.PUT_LINE('REQ_PRESC_MED: OUT');
      END REQ_PRESC_MED
    /
    select * from table (pck_dxpharm_plus.req_presc_med(200510211400, 200509091400, 200510221400, 200510181724, 'AVL,ACP,EQN,SUB,NSO,REF,NDI', 181, 95))
    /
    J'ai ossi essayer en utilisant le cast dans la requete , je sais plus quoi faire.

    si tu as le temps essaie de me dire ce que tu en penses
    merci d'avance;

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Vous ne pouvez pas utiliser %TYPE dans un ordre CREATE TYPE ... AS OBJECT !
    (je sais, c'est null !)
    Vous devez typer directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    AS OBJECT
    (
      col1 VARCHAR2(30),
      col2 NUMBER,
      ...
    )
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  12. #12
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    oki merci pour l'info j'essaierai ca lundi
    je vous tiens au courant
    ENCORE MERCI;-)

  13. #13
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    j'ai essayer ce que tu m'as dit pour les types ca fonctionne, mais ma fonction est compilée avec erreur une idée, je pense que ca vient du fait que mes type ne sont plus INDEX BY INTEGER et du coup , je ne peux plus utiliser dans ma fonction l_lblC(z) ...

    UNE IDEE ?

  14. #14
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par rabddoul
    j'ai essayer ce que tu m'as dit pour les types ca fonctionne, mais ma fonction est compilée avec erreur une idée, je pense que ca vient du fait que mes type ne sont plus INDEX BY INTEGER et du coup , je ne peux plus utiliser dans ma fonction l_lblC(z) ...

    UNE IDEE ?
    Cela serait bien que vous preniez l'habitude de communiquer la fameuse erreur et l'endroit exact ou elle se déclenche !
    Nous ne sommes pas devin et n'avons pas forcément la journée entière pour éplucher votre code.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  15. #15
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut subscript out of range
    pour répondre à votre question , j'ai effectivement mis tout mon code pour que vous puissiez avoir une vision complète du problème, l'erreur dependait d'élement qui n'etait pas en votre possession...

    Suite à cela j'ai enfin reussi a faire compiler ma function req_presc_med mais lorsque j'essaie de remplir un element de cette nested table comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    l_tblA(a).extend;
    t_tblA(a).nisejour := l_nisejour;
    j'ai l'erreur suivante :

    Subscript out of range

    Pourtant j'ai bien initialisé ma nested table comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_tblA tbl_A := tbl_A(null,null,null,null,null,null,null,null);
    Est que j'ai le droit de remplir ma nested table champs par champs ??

    Merci d'avance

  16. #16
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    bonjour tout le monde

    au final j'ai reussi a faire tourner ma function oracle et à retourner la collection de table .
    Il fallait à la fois initialisiser la liste mais également les attributs des objets contenu dans la liste..

    Voila merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de cast dans de l'héritage
    Par dreamanoir dans le forum C++
    Réponses: 4
    Dernier message: 21/02/2005, 21h01
  2. [BDE][Access] utilisation de BDDs sans passer par ODBC
    Par Guigui_ dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/01/2005, 14h11
  3. application utilisant BD locale sans installation complexe
    Par snjonjo dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 09/01/2005, 02h44
  4. Réponses: 1
    Dernier message: 08/11/2004, 16h04
  5. Utilisation de MSGraph sans installation D'office
    Par [DreaMs] dans le forum ASP
    Réponses: 8
    Dernier message: 25/08/2003, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo