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 :

Requête sur paramètre valeurs multiples


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Requête sur paramètre valeurs multiples
    Bonjour,

    Malgré mes recherches sur les différents forums, je n'ai pas trouvé de réponse à ma question (ou alors je n'y ai rien compris, ce qui n'est guère étonnant étant donné mon niveau inférieur à débutant en SQL...).

    Je dois extraire des données saisies via un formulaire. Certains champs de ce formulaire sont à choix multiples.
    Mon but est d'obtenir par une requête toutes les valeurs saisies pour un même champ, en colonnes.

    Exemple:
    le paramètre "etablissement" du formulaire est lié à une table "etablissement", qui possède 2 champs: id (= clé primaire) et libellé.
    1 à 10 valeurs peuvent être saisies dans le formulaire pour ce même paramètre (liste déroulante à choix multiple)
    Je souhaite obtenir comme résultat de ma requête:

    n° du formulaire / etablissement1 / etablissement 2 / etablissement3 etc....
    1 / libelle1 / libelle2 / llibelle3
    2 / libelle1
    3 / libelle1 / libelle2
    ...

    Evidemment, un simple
    select num.formulaire, libelle.etablissement
    from formulaire, etablissement

    me retourne les valeurs en ligne, alors que je veux les obtenir en colonne.

    Merci d'avance à ceux qui pourront m'aider à résoudre ce pb.

    Cordialement,

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu n'as pas spécifié ta version...

    Regarde vers LISTAGG

    ou COLLECT

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonsoir laurentschneider.

    Merci d'avoir répondu. La version d'ORACLE est la version 10g.

    J'ai étudié les liens que tu m'as recommandé, hélas je n'ai rien compris...

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour votre réponse, c'est plus clair pour moi maintenant.

    Cependant, mon soucis est que les fonctions LISTAGG ou COLLECT concatènent les différentes valeurs dans une même colonne. Or j'ai besoin d'avoir les différentes valeurs dans des colonnes différentes.
    Comment écrire une telle fonction ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Faites une recherche sur le mot PIVOT.

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    COLLECT collecte dans une collection...

    Après tu peux toujours dénester pour remplir ta liste !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create type emplist as table of varchar2(10)
    /
    begin
      for f in (select deptno, cast(collect(ename) as emplist) e from emp group by deptno order by deptno)
      loop
        dbms_output.put_line ('Deptno :  '||f.deptno);
        for g in f.e.first .. f.e.last
        loop
          dbms_output.put_line ('       '||f.e(g));
        end loop;
      end loop;
    end;
    /
    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
    Deptno :  10
           CLARK
           MILLER
           KING
    Deptno :  20
           SMITH
           SCOTT
           FORD
           ADAMS
           JONES
    Deptno :  30
           ALLEN
           JAMES
           TURNER
           BLAKE
           MARTIN
           WARD

  8. #8
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Une fois de plus, un SGBDR, c'est pour faire des traitements des données et non la presentation des données qui devait être confier à votre application cliente.

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Il est tout à fait possible d'employer to_char, extract, substr, listagg et autres fonctions de "formattage" dans une requête SQL.

    Pourquoi surcharger le réseau alors que Oracle peut très bien ne retourner que les chaines qui nous intéressent?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Pour les bonnes pratiques, le pattern MVC, tout ca?

    La plus part du temps, ca facilite énormément les évolutions dans le temps, non?
    Les bonnes pratiques, c'est toujours pareil, ca paye sur le long terme.

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Et tu ne crées pas de vue dans ta base de données?

    Quant à savoir s'il vaut mieux des architectes casse-pieds à la sauce CMMI/ITIL ou alors un design/performance au niveau de la base utilisant toutes les resources d'Oracle, je vous laisse le choix, moi je dois être tombé dans la soupe quand j'étais petit...

  12. #12
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Et puis bon, les histoires de maintenabilité, ça dérive très souvent en gigantesque arnaque... avec des patterns étranges dans tous les sens, des couches de programmation à ne plus en finir et des appels dynamiques qui finissent toujours par te perdre !

    Je suis intervenu récemment chez un ancien client parce que :
    - Seul les anciens comprennent encore vraiment comment est architecturé le système (En gros c'est super maintenable, mais il faut 3 semaines de formation aux nouveaux arrivants)
    - Pour optimiser les performances, la préconisation du gars de chez Oracle était : cassez tout et recommencez... du coup on a optimisé en cherchant les calculs superflus dont on pouvait se passer, passer des fonctionnalités en batch, ...
    (J'exagère un peu, il y a certains trucs qu'on a pu réécrire à l'arrache quand même, j'étais très content aussi de découvrir le RESULT_CACHE)

Discussions similaires

  1. Paramètres à valeurs multiples
    Par CinePhil dans le forum Optimisations
    Réponses: 4
    Dernier message: 04/07/2008, 12h36
  2. [2.2.0] Paramètre à valeurs multiples ?
    Par lazarel dans le forum BIRT
    Réponses: 25
    Dernier message: 26/06/2008, 10h39
  3. Encodage URL dynamique avec des paramètres à valeurs multiples
    Par lazarel dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/03/2008, 16h35
  4. [8.5] Imprimer un paramètre à valeurs multiples
    Par s_guiraud_fr dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 30/05/2007, 17h08
  5. [CR8] Champs de paramètres à valeurs multiples
    Par Nout dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/02/2005, 16h51

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