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 :

Insertion en pivot (colonnes en lignes)


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    Par défaut Insertion en pivot (colonnes en lignes)
    Bonjour,

    j'ai un curseur qui me retourne un résultat (4 variables)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FOR i IN Date_cur LOOP
    vx:=i.date_x; 
     
    REQ := 'SELECT round(sum(SOLDE),2) FROM COMPTE_'||i.date_x||'
    execute immediate REQ into V1;
    j'obtient ici 4 lignes


    je veux inseréer dans ma table(A,B,C,D,X,Y,Z)
    les valeurs (V1(1),V1(2),V1(3),V1(4),X,Y,Z)

    merci à vous.

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Si tu restes dans ce contexte "PL/SQL" avec cursor etc ... je testerais bien l'idée du "associative array".
    Pour chaque valeur de "i" dans ton LOOP, tu peux remplir cet "associative array" et ensuite réaccéder les différents éléments pour faire ton insert.
    Néanmoins, et même si je ne connais pas le contexte global, j'aurais tendance a penser qu'il serait bien aussi de pouvoir se séparer du LOOP, cursor, etc .. et pouvoir construire une requête avec un pivot. Mais, tout dépends de la situation, effectivement.

    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Bonjour,

    "associative array".
    merci pour ton retour,
    tu peux s'il te plaît, illustrer par un exemple? je me trouve pas !

  4. #4
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Salut,

    Ok, j'essaie un petit test:
    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
     
    /* --  je fais qq tables -- */
    --
    -- MY_TAB_1  (Table) 
    --
    CREATE TABLE MY_TAB_1
    (
      SOLDE  NUMBER
    );
     
     
    --
    -- MY_TAB_2  (Table) 
    --
    CREATE TABLE MY_TAB_2
    (
      SOLDE  NUMBER
    );
     
     
    --
    -- MY_TAB_3  (Table) 
    --
    CREATE TABLE MY_TAB_3
    (
      SOLDE  NUMBER
    );
     
     
    --
    -- MY_TAB_4  (Table) 
    --
    CREATE TABLE MY_TAB_4
    (
      SOLDE  NUMBER
    );
     
     
    --
    -- MY_TAB_4_COLS  (Table) 
    --
    CREATE TABLE MY_TAB_4_COLS
    (
      V1  NUMBER,
      V2  NUMBER,
      V3  NUMBER,
      V4  NUMBER
    );
     
    Insert into MY_TAB_1
       (SOLDE)
     Values
       (1);
    Insert into MY_TAB_1
       (SOLDE)
     Values
       (2);
    Insert into MY_TAB_1
       (SOLDE)
     Values
       (3);
    COMMIT;
     
     
    Insert into MY_TAB_2
       (SOLDE)
     Values
       (10);
    Insert into MY_TAB_2
       (SOLDE)
     Values
       (20);
    Insert into MY_TAB_2
       (SOLDE)
     Values
       (30);
    COMMIT;
     
     
    Insert into MY_TAB_3
       (SOLDE)
     Values
       (100);
    Insert into MY_TAB_3
       (SOLDE)
     Values
       (200);
    Insert into MY_TAB_3
       (SOLDE)
     Values
       (300);
    COMMIT;
     
     
    Insert into MY_TAB_4
       (SOLDE)
     Values
       (1000);
    Insert into MY_TAB_4
       (SOLDE)
     Values
       (2000);
    Insert into MY_TAB_4
       (SOLDE)
     Values
       (3000);
    COMMIT;
     
    /* ----------------------- */
     
    /* -- un bout de code -- */
    DECLARE
       temp_model_sql   VARCHAR2 (45 CHAR) DEFAULT 'SELECT round(sum(SOLDE),2) FROM MY_TAB_<IDX>';
       dyn_sql          VARCHAR2 (45 CHAR);
       temp_sum_solde   NUMBER;
     
       TYPE array_of_solde IS TABLE OF NUMBER
          INDEX BY VARCHAR2 (2 CHAR);
     
       les_soldes       array_of_solde;
    BEGIN
       FOR i IN 1 .. 4
       LOOP
          dyn_sql := REPLACE (temp_model_sql, '<IDX>', i);
     
          EXECUTE IMMEDIATE dyn_sql INTO temp_sum_solde;
     
          les_soldes ('V' || TO_CHAR (i)) := temp_sum_solde;
       END LOOP;
     
       INSERT INTO MY_TAB_4_COLS (V1
                                , V2
                                , V3
                                , V4)
            VALUES (les_soldes ('V1')
                  , les_soldes ('V2')
                  , les_soldes ('V3')
                  , les_soldes ('V4'));
     
       COMMIT;
    END;
    En espérant que cela puisse t'aider,
    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    Par défaut
    merci pour ton soutien, mais le problème que ma requête varie selon plusieurs conditions (j'ai plusieurs requêtes),

    autrement, existe t-il une option pour transformer une table en transposer?

    plus précisément transformer les lignes en colonnes à travers une vue ou une procédure?

    merci

  6. #6
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Citation Envoyé par LandGreen Voir le message

    plus précisément transformer les lignes en colonnes à travers une vue ou une procédure?
    PIVOT ?
    Voire même MODEL, en fonction des cas ...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 404
    Points : 40
    Points
    40
    Par défaut
    merci infiniment Sunchaser je l'ai résolu grâce à

  8. #8
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Salut,
    Content de voir que tes problèmes sont résolus. Je ne pouvais avancer plus, car le travail m'a rappellé que j'avais des impératifs sous peu.
    Néanmoins, j'avais regardé divers sujets autour de tout cela, et je me suis souvenu de cela: dynamic pivoting
    Je ne sais pas si cela peut aider, mais je trouvais le truc intéressant (attention: je n'ai jamais utilisé le truc "pour de vrai", juste le code et la manière de procéder m'interessaient à l'époque).

    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/12/2017, 17h59
  2. Réponses: 0
    Dernier message: 09/01/2015, 10h04
  3. [XL-2003] Insertion colonnes puis lignes suivant conditions.
    Par saphir78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/08/2011, 18h04
  4. Réponses: 2
    Dernier message: 30/09/2008, 15h18
  5. TRANSFORM et PIVOT? Transformer les lignes en colonnes
    Par capitaine dans le forum Access
    Réponses: 1
    Dernier message: 12/07/2006, 12h53

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