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 :

Les collections de type nested table


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut Les collections de type nested table
    Bonjour à tous.
    Comment faire pour passer une variable de type nested table à une procédure d'un package?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE OR REPLACE PACKAGE BODY package1 is
      type tabVarchar2 is table of varchar2(100) index by binary_integer;
      monTab tabVarchar2;
      procdure proc1
      is 
      begin
      monTab(0):='valeur1';
      package2.proc2('var1','var2',monTab);
      end proc1;
    end package1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE OR REPLACE PACKAGE package2 is
           type tabVarchar2 is table of varchar2(100) index by binary_integer;
           procedure proc2(p_var1 varchar2,p_var2 varchar2,p_tab in tabVarchar2)
           is
           begin
           ......code
           end proc2
    end package2
    ce code génére une erreur à la compilation : PLS-00306 numéro ou types d'arguments erronés dans l'appel à 'proc2'

    Merci pour vos réponses.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut


    Il suffit de mettre la déclaration du type dans le spec du package et pas dans le body.

  3. #3
    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
    Par défaut
    Il faut utiliser le type créé dans package2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE PACKAGE BODY package1 is
    monTab package2.tabVarchar2;
    procdure proc1
    is 
    begin
    monTab(0):='valeur1';
    package2.proc2(monTab);
    end proc1;
    end package1

  4. #4
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut
    Merci pour votre aide mais cela ne marche pas....

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Donne le code exact et complet de tes packages (il n'y a pas les spec).

  6. #6
    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
    Par défaut
    Citation Envoyé par romuald07 Voir le message
    Merci pour votre aide mais cela ne marche pas....
    Qu'est ce que ça veut dire ça ne marche pas ? Il faut qu'on devine l'erreur ?

  7. #7
    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
    Par défaut
    Inspire-toi de cet exemple qui fonctionne :
    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
    SQL> create or replace package pack1 is
      2     type tabVarchar2 IS TABLE of varchar2(100) INDEX BY binary_integer;
      3     procedure proc1 (t tabVarchar2);
      4  end;
      5  /
    Package créé.
     
    SQL> create or replace package body pack1 is
      2    procedure proc1 (t tabVarchar2) is
      3    begin
      4      null;
      5    end;
      6  end;
      7  /
    Corps de package créé.
     
    SQL> create or replace package pack2 is
      2    procedure proc2;
      3  end;
      4  /
    Package créé.
     
    SQL> create or replace package body pack2 is
      2     tab2 pack1.tabVarchar2;
      3     procedure proc2 is
      4     begin
      5        pack1.proc1(tab2);
      6     end;
      7  end;
      8  /
    Corps de package créé.

  8. #8
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut
    C'est ça marche.
    Mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE OR REPLACE PACKAGE BODY package1 IS
      type tabVarchar2 IS TABLE of varchar2(100) INDEX BY binary_integer;
      monTab package2 .tabVarchar2;
      procdure proc1
      IS 
      begin
      monTab(0):='valeur1';
      package2.proc2('var1','var2',monTab);
      end proc1;
    end package1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE OR REPLACE PACKAGE package2 IS
           type tabVarchar2 IS TABLE of varchar2(100) INDEX BY binary_integer;
           procedure proc2(p_var1 varchar2,p_var2 varchar2,p_tab IN tabVarchar2)
           IS
           begin
           ......code
           end proc2
    end package2
    Merci pour vos réponses.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 30/03/2012, 16h49
  2. les différents types de tables sous mysql
    Par lamou23 dans le forum MySQL
    Réponses: 8
    Dernier message: 13/07/2010, 23h09
  3. Requêter en HQL les propriétés de type Collection
    Par sicard_51 dans le forum Hibernate
    Réponses: 1
    Dernier message: 08/03/2010, 20h08
  4. Problème d'index avec les nested tables
    Par zeinoul1 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 26/10/2006, 12h28
  5. Problème avec les champs de type table
    Par devdev dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/12/2004, 16h05

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