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 :

Oracle Fonction WM_CONCAT


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Par défaut Oracle Fonction WM_CONCAT
    Bonjour,
    j'utilise cette fonction dans une requete pour afficher en ligne des éléments présents en colonne dans une table :

    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
    select WM_CONCAT(lot_id) as lots
    from
    (
    select z_lot_id.lot_id
    from z_lot_id where ach_lot_seq in (19170,
    19170,
    19170,
    19170,
    19170,
    19170,
    19165,
    19165,
    19165,
    19165,
    19165,
    19165,
    31983,
    19613)
    )
    j'obtient :
    Nom : 1.png
Affichages : 952
Taille : 1,2 Ko


    Question : comment remplacer la virgule par un tiret "-" ??

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 132
    Par défaut
    WM_CONCAT est une fonction non documentée d'Oracle qui a été remplacée par LIST_AGG depuis la version 11gR2.
    Elle n'est d'ailleurs plus disponible depuis la version 12c.

    LIST_AGG accepte un second argument qui est utilisé comme séparateur de liste.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 167
    Par défaut
    En effet la fonction WM_CONCAT est non documentée. Il faut utiliser LISTAGG qui permet de préciser le séparateur. En 12.2 elle a été améliorée pour gérer un éventuel débordement (concaténation trop longue), et en 19c on peut ajouter l'opérateur DISTINCT.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Par défaut
    Super merci de votre aide, voici ce que donne ma requete du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select LISTAGG(lot_id,'-') within group(order by lot_id) "LOTS"
    from
    (
    select distinct z_tracabilite_export_crets.lot_id
    from z_tracabilite_export_crets where z_tracabilite_export_crets.comp_ach_lotseq in
    (
    select distinct z_tracabilite_export_crets.comp_ach_lotseq
    from z_tracabilite_export_crets
    where ven_bl = 6457
    )
    )
    order by lot_id;
    une derniere question : puis-je avoir deux LISTAGG dans une meme requete ?? C'est a dire une 1ere colonne avec la requete ci desssu et une 2eme colonne avec cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select LISTAGG(comp_val,'-') within group(order by comp_val) "DATEABATT"
    from
    (
    select distinct z_tracabilite_export_crets.comp_val
    from z_tracabilite_export_crets where z_tracabilite_export_crets.comp_ach_lotseq in
    (
    select distinct z_tracabilite_export_crets.comp_ach_lotseq
    from z_tracabilite_export_crets
    where ven_bl = 6457
    )
    and z_tracabilite_export_crets.comp_numero = 1
    )
    order by comp_val;
    J'espere avoir été clair .

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

Discussions similaires

  1. [DBExpress] Oracle fonction cast
    Par delphichem dans le forum Bases de données
    Réponses: 6
    Dernier message: 22/07/2008, 19h15
  2. [Oracle] Fonction to_date
    Par Run_974 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 16/08/2007, 17h16
  3. [Oracle] Fonction sur nombre
    Par dinver78 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/07/2007, 11h38
  4. [Oracle] fonction pl/sql pour calcul pwd
    Par shaun_the_sheep dans le forum PL/SQL
    Réponses: 7
    Dernier message: 02/06/2006, 15h38
  5. [Oracle / Fonction hachage] Fonction de hachage SHA / MD5
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 8
    Dernier message: 26/01/2006, 08h58

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