Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
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 08/03/2007, 10h20   #1
Invité de passage
 
Inscription : février 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 14
Points : 1
Points : 1
Par défaut Une ligne pour n données

Bonjour à tous !
Une question concernant une requête dont je n'arrive pas à me sortir...
J'ai les deux tables suivantes :

Individu

Nom | Prenom | DatedeNaissance
-----| ----------|----------
Toto | Totu | 20070512


Adresses Individu

FK_Individu | Adresse
-----------|-------------
Toto | Adresse 1
Toto | Adresse 2


Et voilà, j'aimerais avoir en une requete le resultat suivant :

Nom | Prenom | Adresse | Adresse
-----------------------------------
Toto | Totu | Adresse1|Adresse2

Qui plus est, vous vous imaginez bien que ceci n'est qu'un exemple. Je peux en effet avoir n adresses à récupérer
Auriez-vous une solution ou du moins une piste pour faire une requête relativement légère (pas d'union ou de trucs dans le genre )
Merci beaucoup d'avance, si vous trouvez qque chose, vous me sauvez !
guil1230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 10h25   #2
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,

Perso, je ferais un petit curseur sur adresse et avec une petite procedure plsql faire la concaténation du résultat avec le resultat de la 1ere requete.
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 10h32   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ça a été très souvent traité, essaye de faire une recherche dans ce forum et le forum SQL.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 10h57   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
La solution dépend de la version d'oracle. Alors merci de respecter les règles du forum et de préciser votre version.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 11h12   #5
Invité de passage
 
Inscription : février 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 14
Points : 1
Points : 1
Oracle 10g, dsl
Pour les autres posts du forum, les solutions trouvées sont pour des exemples precis avec des nombres de colonnes arretés.
Personnellement, je cherche à construire "dynamiquement" mes colonnes.
Dans l'exemple de mon 1er message, un individu peut avoir 1 adresse mais un autre peut en avoir 4 etc...
Donc le nombre de colonnes est variable.
Merci de vos idées !
guil1230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 11h24   #6
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Dans ce cas tu peux créer ta propre fonction d'aggrégation :
http://www.developpez.net/forums/sho...98&postcount=4
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 11h28   #7
Invité de passage
 
Inscription : février 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 14
Points : 1
Points : 1
Merci je vais lire tout ça
guil1230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 11h29   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Citation:
Envoyé par guil1230
Oracle 10g, dsl
Pour les autres posts du forum, les solutions trouvées sont pour des exemples precis avec des nombres de colonnes arretés.
Personnellement, je cherche à construire "dynamiquement" mes colonnes.
Dans l'exemple de mon 1er message, un individu peut avoir 1 adresse mais un autre peut en avoir 4 etc...
Donc le nombre de colonnes est variable.
Merci de vos idées !
Le nb va être variable suivant les lignes ramenées... je ne crois pas que ce soit possible d'avoir 5 colonnes pour la ligne 1, 18 pour la ligne 2 et 2500 pour la ligne 112.

C'est pour utiliser dans quoi cette requete ?
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 11h42   #9
Invité de passage
 
Inscription : février 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 14
Points : 1
Points : 1
Je decris plus précisemment le problème :

J'ai une application où les utilisateurs peuvent créer leurs champs. Ceux-ci sont associés à la source de données alimentant la fenêtre dans laquelle ils sont créés.
Par exemple, j'ai une fenetre qui affiche tous les individus; l'utilisateur ajoute visuellement les champ "Adresse" et "Profession" qui n'existaient pas auparavant. Plutot que de changer la structure de la table, j'utilise le modele de meta-données .
cf http://sqlpro.developpez.com/cours/m...n/metadonnees/
Ma requete entre la table Individu et le modele meta-donnée me renvoie deux lignes pour chaque individu (car dans le meta modele, on a une ligne par nouveau champ créé) :

Nom | Prenom | Profession
Nom | Prenom | Adresse

Or je souhaiterais Nom | Prenom | Profession | Adresse.

Le nombre de colonnes est variables car je peux avoir la table "Société", affichée dans une autre fenetre à qui l'utilisateur aura ajouté 5 champs. Donc lors d'une même requete, on aura toujours le même nombre de colonnes.
J'avoue que je n'avais pas été très précis là dessus !

Voilà precisemment mon cas d'utilisation
guil1230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 11h49   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
non mais là c'est à l'applicatif de se débrouiller, en SQL ce n'est pas possible

Le SQL récupère des données, charge au client (SQL*Plus, Forms, J2EE, etc...) de mettre le résultat en forme
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 13h40   #11
Invité de passage
 
Inscription : février 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 14
Points : 1
Points : 1
Personne n'a une piste ?
Les aggregats ne semblent pas repondre à mes besoins
guil1230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 13h59   #12
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Est ce que tu peux utiliser une procédure pl/sql ou est ce qu'il te faut une 'vrai' requete ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 14h21   #13
Invité de passage
 
Inscription : février 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 14
Points : 1
Points : 1
Bien sur je peux utiliser un procédure PL/SQL
J'essaie d'en faire une d'ailleurs depuis ce matin mais j'avoue que je rame bien comme il faut !
guil1230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 14h34   #14
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Citation:
Bien sur je peux utiliser un procédure PL/SQL
C'est pas forcement évident (y'en a qui travaille avec des progiciels qui peuvent pas forcement le faire...)

En regardant de plus près ton problème, peut être qu'un curseur dynamique pourrait t'aider

Je prends l'exemple de l'adresse :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare
 /* declaration du curseur sur les individus */
 cursor mon_curseur IS SELECT * FROM individu;
begin
 FOR i IN mon_curseur loop
 /* creation d'un curseur dynamique sur les adresses */
   open mon_nouveau_curseur FOR SELECT * FROM Adresses WHERE FK_Individu=i.Nom;
   loop
   fetch mon_nouveau_curseur INTO res_curseur;
        exit when (mon_nouveau_curseur%notfound);
        /* traitement du résultat (concaténation info individu + info adresse) */
   end loop;
  close mon_nouveau_curseur;
 end loop;
end;
si il y a des erreurs de syntaxe je m'en excuse, mais l'idée est là
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 14h41   #15
Invité de passage
 
Inscription : février 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 14
Points : 1
Points : 1
C'est effectivement dans ce sens que je m'oriente. Merci de ton aide
guil1230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 14h54   #16
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Les fonctions pipelined peuvent être une solution à ton problème.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 22h11   #17
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
+ d'info sur les pipelined ici :
http://sheikyerbouti.developpez.com/pl_sql/?page=Chap4

Par contre, je vois pas bien ce que l'on gagne à ce servir de ça...
PlaineR, peux tu nous en dire plus sur les avantages / inconvenients de cette fonction ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h56.


 
 
 
 
Partenaires

Hébergement Web