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

PL/SQL Oracle Discussion :

Passer un tableau en paramètre d'une procédure


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Passer un tableau en paramètre d'une procédure
    Bonjour,
    J'ai déjà pas mal cherché sur ce sujet mais je sèche complètement.. Voici mon problème : j'ai un package, dont l'une des procédures a en argument un tableau.

    Le code du package :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create or replace PACKAGE    my_cd_package IS
      -- Déclaration d'un tableau
      TYPE tab IS TABLE OF BB_TITRES.TIT_NOM%TYPE INDEX BY BINARY_INTEGER;
      -- Etat du contenu de la table
      PROCEDURE cdreport;
     -- Procédure d'insertion d'artiste
      PROCEDURE cdadd_art(nom VARCHAR);
     -- Procédure d'insertion d'album (avec titres)
      PROCEDURE cdadd_alb(nom VARCHAR, tabtitres IN my_cd_package.tab, art NUMBER, cat NUMBER);
     -- Procédure d'insertion de catégorie
      PROCEDURE cdadd_cat(nom VARCHAR);
     -- Formulaire d'ajout
      PROCEDURE cdform;
    END my_cd_package;
    Le code du corps du package :
    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
    create or replace PACKAGE BODY my_cd_package IS
     
      PROCEDURE cdreport IS
        CURSOR c1 IS SELECT CAT_NOM, alb.ALB_ID, ALB_NOM, ALB_PRIX, ART_NOM FROM BB_CATEGORIES cat, BB_ALBUMS alb, BB_ARTISTES art WHERE art.ART_ID=alb.ART_ID AND alb.CAT_ID=cat.CAT_ID;
        CURSOR c2(id NUMBER) IS SELECT TIT_NOM FROM BB_TITRES tit WHERE tit.ALB_ID=id;
        nom BB_TITRES.TIT_NOM%TYPE;
        BEGIN
          htp.htmlopen;
          htp.headopen;
          htp.htitle('Mon e-Shopping : résultats');
          htp.headclose;
          htp.bodyopen(cattributes => 'BGCOLOR="#FFF99"');
          htp.br;
          htp.print('<CENTER>');
          htp.tableopen(cborder => 'BORDER="1"', cattributes => 'ALIGN="CENTER"');
          htp.tableHeader('Catégorie', cattributes => 'BGCOLOR="#FF9900"');
          htp.tableHeader('Artiste', cattributes => 'BGCOLOR="#FF9900"');
          htp.tableHeader('Album', cattributes => 'BGCOLOR="#FF9900"');
          htp.tableHeader('Prix', cattributes => 'BGCOLOR="#FF9900"');
          htp.tableHeader('Titres', cattributes => 'BGCOLOR="#FF9900"');
          FOR rec IN c1 LOOP
            htp.tablerowopen;
            htp.tabledata(rec.CAT_NOM);
            htp.tabledata(rec.ART_NOM);
            htp.tabledata(rec.ALB_NOM);
            htp.tabledata(rec.ALB_PRIX);
            if not (c2%ISOPEN) then 
              Open c2(rec.ALB_ID);
            end if;
            htp.print('<TD><TABLE width="auto" border=1>');
            loop
              fetch c2 into nom;
              exit when c2%NOTFOUND or c2%ROWCOUNT=0;
              htp.print('<TR><TD>');
              htp.print(nom);
              htp.print('</TD></TR>');
              htp.tablerowopen;
            end loop;
            htp.print('</TABLE></TD>');
            Close c2;
            htp.tablerowclose;
          END LOOP;
        htp.tableclose;
        htp.bodyclose;
        htp.htmlclose;
      END;
     
      PROCEDURE cdadd_art(nom VARCHAR) IS
        BEGIN
        -- On ajoute la ligne
        INSERT INTO BB_ARTISTES (ART_NOM) VALUES (nom);
        COMMIT;
        -- On redirige vers l'état final
        owa_util.redirect_url(curl => 'my_cd_package.cdreport');
      END;
     
      PROCEDURE cdadd_cat(nom VARCHAR) IS
        BEGIN
        -- On ajoute la ligne
        INSERT INTO BB_CATEGORIES (CAT_NOM) VALUES (nom);
        COMMIT;
        -- On redirige vers l'état final
        owa_util.redirect_url(curl => 'my_cd_package.cdreport');
      END;
     
      PROCEDURE cdadd_alb(nom VARCHAR, tabtitres IN my_cd_package.tab, art NUMBER, cat NUMBER) IS
     -- PROCEDURE cdadd_alb(nom VARCHAR, art NUMBER, cat NUMBER) IS
        BEGIN
        --dbms_output.put_line( tabtitres( tabtitres.first ) ); 
        -- Pour chaque élément du tableau en paramètre, on ajoute un titre à l'album
        -- et on associe l'album à un artiste et à une catégorie
        /*
        IF tabtitres.COUNT != 0 THEN
          FOR i IN 1 .. tabtitres.COUNT LOOP
            INSERT INTO BB_TITRES (TIT_NOM) VALUES (tabtitres(i));
            COMMIT;
          END LOOP;
        END IF;
      */
      COMMIT;
      owa_util.redirect_url(curl => 'my_cd_package.cdreport');
      END;
     
      PROCEDURE cdform IS
        BEGIN
        htp.htmlopen;
        htp.headopen;
        htp.htitle('Mon e-Shopping : formulaire');
        htp.headclose;
        htp.bodyopen(cattributes => 'BGCOLOR="#FFF99"');
        htp.br;
        htp.print('<CENTER>');
        htp.tableopen;
        -- Ajout d'artiste
        htp.tablerowopen;
        htp.formopen(curl => 'my_cd_package.cdadd_art', cmethod => 'POST');
        htp.tableopen(cborder => 'BORDER="1"');
        htp.tablerowopen;
        htp.tabledata(cvalue => 'Nom de l''artiste :');
        htp.print('<TD>');
        htp.formtext(cname => 'nom');
        htp.print('<TD>');
        htp.tablerowclose;
        htp.tableclose;
        htp.formsubmit;
        htp.formclose;
        htp.tablerowclose;
        -- Ajout de catégorie
        htp.tablerowopen;
        htp.formopen(curl => 'my_cd_package.cdadd_cat', cmethod => 'POST');
        htp.tableopen(cborder => 'BORDER="1"');
        htp.tablerowopen;
        htp.tabledata(cvalue => 'Nom de la catégorie :');
        htp.print('<TD>');
        htp.formtext(cname => 'nom');
        htp.print('<TD>');
        htp.tablerowclose;
        htp.tableclose;
        htp.formsubmit;
        htp.formclose;
        htp.tablerowclose;
        htp.tableclose;
        -- Ajout d'album
        htp.tablerowopen;
        htp.formopen(curl => 'my_cd_package.cdadd_alb', cmethod => 'POST');
        htp.tableopen(cborder => 'BORDER="1"');
        htp.tablerowopen;
        htp.tabledata(cvalue => 'Nom de l''album :');
        htp.print('<TD>');
        htp.formtext(cname => 'nom');
        htp.print('<TD>');
        htp.tablerowclose;
        /*
        For i in 1..10
          Loop
            htp.tablerowopen;
            htp.tabledata(cvalue => 'Titre :');
            htp.print('<TD>');
            htp.formtext(cname => 'tabtitres');
            htp.print('<TD>');
            htp.tablerowclose;
          End loop ;
        */
        htp.tablerowopen;
        htp.tabledata(cvalue => 'ID de l''artiste :');
        htp.print('<TD>');
        htp.formtext(cname => 'art');
        htp.print('<TD>');
        htp.tablerowclose;
        htp.tablerowopen;
        htp.tabledata(cvalue => 'ID de la catégorie :');
        htp.print('<TD>');
        htp.formtext(cname => 'cat');
        htp.print('<TD>');
        htp.tablerowclose;
        htp.tableclose;
        htp.formsubmit;
        htp.formclose;
        htp.tablerowclose;
        htp.tableclose;
        htp.print('</CENTER>');
      END;
     
    END my_cd_package;
    La procédure qui pose problème est cdadd_alb. J'appelle ma procédure form dans mon navigateur, je remplis la partie du formulaire d'ajout d'album, et quand j'envoie, s'affiche l'erreur suivante : "The requested URL /hr/my_cd_package.cdadd_alb was not found on this server".
    Quelqu'un aurait une idée ?
    Merci beaucoup !

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2012, 15h19
  2. Réponses: 0
    Dernier message: 23/12/2009, 12h38
  3. Passer un curseur en paramètre d'une procédure
    Par tommy_f dans le forum Forms
    Réponses: 4
    Dernier message: 13/05/2008, 16h54
  4. Réponses: 2
    Dernier message: 03/12/2006, 12h37
  5. Réponses: 1
    Dernier message: 23/05/2006, 14h36

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