Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2011, 21h33   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 0
Points : 0
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,
n.amavic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 10h11   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
tu n'as pas spécifié ta version...

Regarde vers LISTAGG

ou COLLECT
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/06/2011, 22h47   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 0
Points : 0
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...
n.amavic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 09h40   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
regarde aussi

http://www.oracle-base.com/articles/...Techniques.php
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h15   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 0
Points : 0
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 ?
n.amavic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 11h01   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Faites une recherche sur le mot PIVOT.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 11h29   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
COLLECT collecte dans une collection...

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

Code :
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 :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 18h03   #8
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

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

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
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.
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 20/06/2011, 10h26   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
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?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h07   #10
Membre expérimenté
 
François
Inscription : février 2010
Messages : 305
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 305
Points : 535
Points : 535
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.
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 12h37   #11
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
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...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/06/2011, 18h03   #12
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
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)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h22.


 
 
 
 
Partenaires

Hébergement Web