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 :

multiset et union


Sujet :

Oracle

  1. #1
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut multiset et union
    Bonjour,


    J'ai un souci dans un requête qui utilise un multiset et un union :
    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
     
    select  /*+ index(a idx_grp_predefini_parent) */
       grp_id,
       grp_lib,
       parent_id,
       (select distinct 1 from grp_predefini c where c.parent_id = a.grp_id) hasChildren,
       level,
       (select distinct 1 from grp_gest c where c.grp_id = a.grp_id and c.client_id = 197792) canModify,
       a.dynamic,
       decode(hidden, 'yes', 'yes', 'no', 'no', owner_hidden) hidden,
       f_concat_list(
          cast(
             multiset(
                select   c.nom || ' ' || c.prenom nom
                from     grp_gest b, pp_client c
                where    b.grp_id = a.grp_id and
                         b.client_id = c.client_id and
                         c.statut_id <> 'D'[color=orange]
                union
                select   c.nom || ' ' || c.prenom nom
                from     pp_client c
                where    c.client_id = a.owner_id
                order by c.nom, c.prenom[/color]
             ) as tabString
          )
       ) managers
    from
       grp_predefini a
    connect by
       parent_id = prior grp_id
    start with
       grp_id = 10000
    L'erreur retournée est ORA-03001: cette option n'est pas prise en charge...
    Si j'enlève le petit bout de requête qui suit l'union ca marche.

    Quelqu'un connait il un moyen de contourner ce pb ? Je n'ai rien trouvé sur Metalink...


    Merci par avance,

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    tu travailles avec quelle version de Oracle

  3. #3
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Je suis en 8.1.7.4 (j'aurais du le préciser)


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    bon je pense que ca viens de la requete composée, avant d'aller plus loin pourrais tu tenter une chose

    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
    select  /*+ index(a idx_grp_predefini_parent) */ 
       grp_id, 
       grp_lib, 
       parent_id, 
       (select distinct 1 from grp_predefini c where c.parent_id = a.grp_id) hasChildren, 
       level, 
       (select distinct 1 from grp_gest c where c.grp_id = a.grp_id and c.client_id = 197792) canModify, 
       a.dynamic, 
       decode(hidden, 'yes', 'yes', 'no', 'no', owner_hidden) hidden, 
       f_concat_list( 
          cast( 
             multiset( 
                SELECT a.* FROM (select   c.nom || ' ' || c.prenom nom 
                from     grp_gest b, pp_client c 
                where    b.grp_id = a.grp_id and 
                         b.client_id = c.client_id and 
                         c.statut_id <> 'D' 
                union 
                select   c.nom || ' ' || c.prenom nom 
                from     pp_client c 
                where    c.client_id = a.owner_id 
                order by c.nom, c.prenom) a
             ) as tabString 
          ) 
       ) managers 
    from 
       grp_predefini a 
    connect by 
       parent_id = prior grp_id 
    start with 
       grp_id = 10000

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Non ca marche pas, le message d'erreur est différent, c'est Nom de colonne non valide sur a.grp_id, je pense que c'est parce que j'ai trop de niveau de profondeur...


    Merci,

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    non ca viens de mon nom de table

    essaie celle la

    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
    select  /*+ index(a idx_grp_predefini_parent) */ 
       grp_id, 
       grp_lib, 
       parent_id, 
       (select distinct 1 from grp_predefini c where c.parent_id = a.grp_id) hasChildren, 
       level, 
       (select distinct 1 from grp_gest c where c.grp_id = a.grp_id and c.client_id = 197792) canModify, 
       a.dynamic, 
       decode(hidden, 'yes', 'yes', 'no', 'no', owner_hidden) hidden, 
       f_concat_list( 
          cast( 
             multiset( 
                SELECT TEST.* FROM (select   c.nom || ' ' || c.prenom nom 
                from     grp_gest b, pp_client c 
                where    b.grp_id = a.grp_id and 
                         b.client_id = c.client_id and 
                         c.statut_id <> 'D' 
                union 
                select   c.nom || ' ' || c.prenom nom 
                from     pp_client c 
                where    c.client_id = a.owner_id 
                order by c.nom, c.prenom) TEST 
             ) as tabString 
          ) 
       ) managers 
    from 
       grp_predefini a 
    connect by 
       parent_id = prior grp_id 
    start with 
       grp_id = 10000

  7. #7
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Non, j'avais vu et renommer mais j'ai toujours le pb...

    En tout cas merci de t'intéresser à mon pb.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    bon on c que ca viens des deux requetes avec union, c pas tres clair dans la doc mais je suis pas sur que cela soit faisable avec un union ici

    il faudrait voir si il ne te serait pas possible de les remettre en 1 seule requete

  9. #9
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    OK merci, c'est dommage que ce soit pas possible.


    Merci de ton aide, je vais tout réécrire.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    tiens moi au courant

  11. #11
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par helyos
    il faudrait voir si il ne te serait pas possible de les remettre en 1 seule requete
    à tout hasard, est-ce que ça changerait quelque chose en mettant des parenthèses supplémentaires autour de l'union, c'est à dire (A union B) au lieu de A union B ?
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  12. #12
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Non j'ai exactement le même pb : ORA-03001 : cette option n'est pas prise en charge.


    Merci,

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    l'instruction MULTISET, appliquée aux collections ne permet peut être tout simplement pas ce type de syntaxe. (vous voulez faire une union entre deux nested table ?)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  14. #14
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Non en fait je souhaite obtenir une liste jointe par des ; des lignes ramenées par mes deux sous-requêtes jointes par union
    La fonction f_concat_list fait cette concaténation.

    Ca me fait penser à une solution : je vais faire un f_concat_liste de la première requête || ';' || f_concat_liste de la seconde et ca devrait éliminer mon besoin d'utiliser union.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  15. #15
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Comme vous me l'avez indiqué, la solution est d'encapsuler l'union :
    select *
    from (select ... union select ...)

    http://www.jlcomp.demon.co.uk/ch_16.html

    Malheureusement pour moi ca ne fonctionne pas car j'ai trop de niveau de profondeur.


    Merci à tous.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

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

Discussions similaires

  1. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  2. [ODBC] erreur SQL pour les unions qui renvoient vide
    Par fabriceMerc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/11/2003, 11h06
  3. UNION et COUNT(*)
    Par Goldust dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/08/2003, 09h30
  4. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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