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 :

[10g] [PL/SQL] - interroger dynamiquement une collection


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut [10g] [PL/SQL] - interroger dynamiquement une collection
    Bonjour,
    je me demande comment il est possible (ou plus simplement si c'est possible) de balayer toutes les colonnes d'un record dans un bloc PL/SQL ou d'indiquer dynamiquement le nom d'une colonne .

    Comme un exemple est plus parlant qu'une longue explication, je me lance.

    Prenons le jeu de test suivant, à savoir une collection que j'alimente manuellement :

    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
     
    declare
     
       -- définition du record 
       TYPE R_TEST IS RECORD (
      	   Col1   varchar2(8),
    	   Col2   varchar2(8),
    	   Col3   varchar2(8)
         );
     
       MonRecord  R_TEST;
     
       -- définition de la collection 
       TYPE C_TEST IS TABLE OF R_TEST index by binary_integer ;
     
       MaCollection  C_TEST ;
     
    BEGIN
     
       MonRecord.Col1 := ('A1');
       MonRecord.Col2 := ('B1');
       MonRecord.Col3 := ('C1');
       MaCollection(1) := MonRecord;
     
       MonRecord.Col1 := ('A2');
       MonRecord.Col2 := ('B2');
       MonRecord.Col3 := ('C2');
       MaCollection(2) := MonRecord;
     
    END;
    /
    On a donc un tableau renseigné comme ceci :

    Col1 Col2 Col3
    A1 B1 C1
    A2 B2 C3

    Pour interroger une colonne, je l'indique en dur dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       dbms_output.PUT_LINE(MaCollection(2).col2);
    Ce que je voudrais, c'est accéder à une colonne de la collection de façon dynamique. Par exemple en valorisant une variable :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       v_col  varchar2(10)  :=  'Col1';
       dbms_output.PUT_LINE(MaCollection(2).v_col);
    Bien évidemment, cet exemple ne fonctionne pas, mais y'a-t-il un moyen qui permettrait de le faire ?
    On peut indexer une collection par un varchar2 pour pointer directement sur une ligne. Y'a-t-il un équivalent sur les colonnes?

    Mon besoin est que je dois descendre le contenu d'une table dans une collection (C_TEST), et sur des colonnes que je ne connais pas à l'avance, je vais devoir effectuer un traitement. Le nom des colonnes et le traitement est stocké dans une table de paramètrage, d'où mon problème pour interagir entre les données et le code.
    Ma collection est fixe, puisque c'est la même table qui est attaquée, mais etant donné sa structure ( + de 400 colonnes), je ne me vois pas tester le nom des 400 colonnes en dur dans le code.

    Merci pour vos idées et suggestions.

  2. #2
    Membre émérite Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    On doit pouvoir le faire avec un module PL/SQL dynamique, en y passant en parametre la structure complete sous la forme d'object type, ainsi que les valeurs d'indice et de colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        EXECUTE IMMEDIATE bloc
        USING 
         IN l_structure
        ,IN l_colonne
        ,IN l_indice;

Discussions similaires

  1. [XL-2003] Interroger dynamiquement une base Access via Excel
    Par jeje22 dans le forum Excel
    Réponses: 3
    Dernier message: 09/07/2013, 14h50
  2. Réponses: 8
    Dernier message: 05/03/2007, 11h18
  3. [9i][pl/sql] Dedoublonage d une collection
    Par MorganeD dans le forum Oracle
    Réponses: 8
    Dernier message: 20/09/2005, 17h38
  4. Réponses: 5
    Dernier message: 09/08/2005, 17h38
  5. [PL/SQL] Charger une table dans une collection
    Par nosnoss dans le forum Oracle
    Réponses: 10
    Dernier message: 03/03/2005, 17h56

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