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

SQL Oracle Discussion :

Alimentation simultanée de tableaux à dimensions différentes


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut Alimentation simultanée de tableaux à dimensions différentes
    Bonjour,

    Je dois travailler sur des données en gérant 3 niveaux de rupture, avec comme contrainte que les valeurs des colonnes de rupture ne s'affichent pas sur chaque enregistrement, mais que lorsque l'on passe d'une valeur à l'autre. Donc, le GROUP BY n'est pas approprié, mais j'ai réussi à faire ça avec des NESTED CURSOR.
    Le but maintenant est de "balancer" tout ça dans des tableaux à 1, 2, 3 et 4 (pour les enreg. détails) dimensions afin de retravailler les données, idéalement en utilisant un BULK COLLECT, mais c'est là que je n'y arrive plus.
    Je vous poste ma requête qui marche (sans les BULK COLLECT) et me renvoie des données sous la forme :
    A
    AA
    AAA
    AAAA BBBB CCCC DDDD
    AAAA EEEE FFFF GGGG
    HHHH IIII JJJJ
    BBB
    AAAA BBBB CCCC DDDD
    .......................
    CCC
    ....................
    BB
    AAA
    AAAA BBBB CCCC DDDD
    .......................
    ....................
    CC
    .....................
    B
    AA
    .....................
    C
    .....................

    Et ici la requête :

    select w1.datet, cursor(select w2.code_eds, cursor(select w3.datet_guichet, cursor(select w1.datet || ' ' || p.point, w4.datet, w4.pa, w4.pr, w4.ps
    bulk collect into TTTTAB_DEMI_PAS(w_ind_1)(w_ind_2)(w_ind_3)(w_ind_4),
    TTTTAB_DATET_LONG(w_ind_1)(w_ind_2)(w_ind_3)(w_ind_4),
    TTTTAB_PA(w_ind_1)(w_ind_2)(w_ind_3)(w_ind_4),
    TTTTAB_PR(w_ind_1)(w_ind_2)(w_ind_3)(w_ind_4),
    TTTTAB_PS(w_ind_1)(w_ind_2)(w_ind_3)(w_ind_4)
    from warehouse_redec_rte w4, cpvij_param_datet p
    where w1.datet || ' ' || p.point = to_char(w4.datet (+), 'YYYYMMDD HH24:MI')
    and to_char(w4.datet (+), 'YYYYMMDD') = w3.datet
    and w4.code_eds (+) = w3.code_eds
    and w4.datet_guichet (+) = w3.datet_guichet
    order by w1.datet || ' ' || p.point)
    bulk collect into TTTAB_DATET_GUICHET(w_ind_1)(w_ind_2)(w_ind_3)
    from (select distinct to_char(datet, 'YYYYMMDD') datet, code_eds, datet_guichet from warehouse_redec_rte) w3
    where w3.datet = w2.datet
    and w3.code_eds = w2.code_eds
    order by w3.datet_guichet)
    bulk collect into TTAB_CODE_EDS(w_ind_1)(w_ind_2)
    from (select distinct to_char(datet, 'YYYYMMDD') datet, code_eds from warehouse_redec_rte) w2
    where w2.datet = w1.datet
    order by w2.code_eds)
    bulk collect into TAB_DATET_COURT(w_ind_1)
    from (select distinct to_char(datet, 'YYYYMMDD') datet from warehouse_redec_rte) w1
    order by w1.datet;

    En espérant que quelqu'un a une idée.
    Merci.
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  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
    Et les GROUP BY ROLLUP, GROUP BY CUBE ,etc... ???
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Je ne pense pas que les GROUP BY ROLLUP et GROUP BY CUBE puissent m'aider dans ce cas : sur les lignes de rupture, seules les valeurs de la colonne de rupture doivent être affichées (pas d'agrégation sur les autres colonnes), et sur les autres lignes, seules les valeurs des autres colonnes doivent être affichées (pas les valeurs des colonnes de rupture).
    Ce que fait bien ma requête.
    Mon problème est de passer ce résultat dans des tableaux, en alimentant un tab1(i) avec les valeurs de la première colonne de rupture, un tab2(i)(j) avec pour chaque valeur de tab1(i) les valeurs de la deuxième colonne de rupture, puis un tab3(i)(j)(k) avec pour chaque valeur de tab2(i)(j) les valeurs de la troisième colonne de rupture, et enfin plusieurs tab4(i)(j)(k)(l) avec pour chaque valeur de tab3(i)(j)(k) les valeurs des colonnes détails (un tab4 par colonne détail ==> tab4, tab4', tab4'',...)

    Merci pour votre aide.
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

Discussions similaires

  1. Somme de deux tableaux avec différentes dimensions
    Par LabChNe dans le forum Général Python
    Réponses: 7
    Dernier message: 09/11/2010, 15h32
  2. Réponses: 4
    Dernier message: 23/04/2008, 17h03
  3. [Tableaux] Dimensions des tableaux
    Par Doksuri dans le forum Langage
    Réponses: 6
    Dernier message: 25/01/2008, 11h05
  4. [Conception] Inscription simultanée sur deux sites différents
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/04/2006, 10h28
  5. [Tableaux] les différentes langues
    Par loverdose dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2006, 20h00

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