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 :

[Oracle 10g] Nom de variable dynamique dans un tableau de type


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Points : 66
    Points
    66
    Par défaut [Oracle 10g] Nom de variable dynamique dans un tableau de type
    Bonsoir la team,
    j'ai parcouru le forum mais je n'ai pas trouvé de réponse à mon problème.
    Le lien que j'ai trouvé s'y rapprochant le plus est ici.

    Voici mon problème:
    je souhaiterais utiliser des nom de variables dynamique pour initialiser une table de type.

    Voici la déclaration de ma table de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE TABLE_TYPE IS TABLE OF nom_table%ROWTYPE ;
    RECORD_LIGNES TABLE_TYPE ;
    Voici ce qui me bloque:
    je voudrais initialiser ma structure de 100 colonnes ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pour i de 1 à 100 colonnes
    
    RECORD_LIGNES(1).col1 = ..
    RECORD_LIGNES(1).col2 = ..
    
    fin pour
    Par rapport au lien plus haut, pourriez-vous m'indiquer comment affecter le nom de mes variables dynamiques à ma structure?

    voici le code utile dans le lien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id_cur := dbms_sql.open_cursor;
    dbms_sql.parse (id_cur, v_requete, dbms_sql.native);
    FOR i = 1 TO nb_colonnes_table loop
       dbms_sql.define_column (id_cur, i, v_val_col, n);
    end loop;
    v_nblig := dbms_sql.execute (id_cur);
    v_nblig := dbms_sql.fetch_rows (id_cur);
    FOR i = 1 TO nb_colonnes_table loop
        dbms_sql.column_value (id_cur_mov, 1, v_val_col);
        v_lig := v_lig || v_val_col;
    end loop;
    - v_val_col doit être déclaré en varchar2(n)
    - n est la longueur maxi de tes colonnes (si tu ne souhaites pas prendre de risque, mets 4000)
    - nb_colonnes_table est le nombre de colonnes dans ta table
    - dans ta variable v_requete, tu dois indiquer les colonnes dans l'ordre souhaité.

    Merci de votre aide,
    berni.

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    C'est pas trés clair !
    Le mieux serait de nous donner un exemple du résultat attendu.
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Points : 66
    Points
    66
    Par défaut
    Par rapport à mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pour i de 1 à 100 colonnes
     
    RECORD_LIGNES(1).col + i = ..
     
    fin pour
    Pour ne pas compliqué la situation, je n'ai spécifié qu'une ligne de ma collection (RECORD_LIGNES(1)).

    Je voudrais initialiser une collection avec des paramètres dynamiques (ici "col<mon_indice>").

    Cela évite ainsi déclarer en dur, toutes les colonnes, surtout lorsque beaucoup de code accompagnes l'initialisation.

    La question est donc:
    Comment initialiser les paramètres de ma collection de manière dynamique?

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    J'ai toujours rien compris !
    Je passe la main....
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Points : 66
    Points
    66
    Par défaut
    Comme apparemment cela n'est pas très clair, je vais la faire simple
    Comment initialiser les paramètres d'une collection de manière dynamique?

    Exemple:
    Au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ma_collection.parametre1 := "valeur1";
    ma_collection.parametre2 := "valeur2";
    ma_collection.parametre3 := "valeur3";
    ...
    Faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Pour i de 1 de "nombre de parametre de ma collection"
        ma_collection.parametre + "i" := "valeur" + i;
    fin_pour.
    Voilà, j'espère que c'est plus clair.

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Il est rare que les colonnes d'une table portent des noms de type col1, col2, col3 se prêtant à ce type de traitement. Générez un block Pl/SQL dynamiquement mais regardez plutôt Anydata and anytype in 9i.

Discussions similaires

  1. Enregistrement d'une variable dynamique dans un fichier
    Par zarbydigital dans le forum Langage
    Réponses: 13
    Dernier message: 24/12/2005, 21h28
  2. Réponses: 4
    Dernier message: 13/09/2005, 11h50
  3. Noms de Variables dynamiques
    Par horec dans le forum Langage
    Réponses: 7
    Dernier message: 22/07/2005, 16h47
  4. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58
  5. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44

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