Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 27/12/2007, 17h10   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 3
Points : 3
Par défaut Pb sous requete

Bonjour,
Je suis débutant en SQL et je voudrais savoir s'il est possible d'effectuer une sous requete qui permettrais de récupérer des valeurs de plusieurs champs d'une table "x" et de les regrouper dans un seul champ d'une table "y".
J'éclaircit un peu ma demande en vous copiant la requête que j'ai écrit mais elle est fausse car j'obtiens une erreur: "ORA-00913: Trop de valeurs"

Code :
1
2
3
UPDATE veh_comm SET com = ( SELECT veh_ente.dat_emb,veh_ente.dat_rcp,veh_ente.dat_arr,veh_ente.num_pos,veh_ente.nom_nav,veh_ente.dat_etd,veh_ente.dat_eta,veh_ente.num_voy 
FROM veh_ente WHERE veh_ente.num_veh = 'UU1KSD0F537172220')
WHERE num_veh='UU1KSD0F537172220';
Merci par avance de votre support.
rungis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 18h55   #2
Membre confirmé
 
Inscription : juillet 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 357
Points : 226
Points : 226
tu met a jour un champ donc tu doi ne recuperer que un champ de ton select , essaie plutot ca

Code :
1
2
3
UPDATE veh_comm SET com = ( SELECT CONCAT(veh_ente.dat_emb(CONCAT(veh_ente.dat_rcp,CONCAT(veh_ente.dat_arr, ....)))) 
FROM veh_ente WHERE veh_ente.num_veh = 'UU1KSD0F537172220')
WHERE num_veh='UU1KSD0F537172220';
ZashOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 19h24   #3
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Juste un petit point:

L'utilisation de l'opérateur || à la place de la fonction concat() facilite l'écriture
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 11h35   #4
Invité de passage
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 3
Points : 3
Par défaut re

J'ai donc tappé ceci et cela ne fonctionne pas, il me retourne que j'ai un nombre d'arguments incorrects:
Code :
1
2
3
4
5
UPDATE veh_comm SET com = ( SELECT CONCAT(veh_ente.dat_emb,CONCAT(veh_ente.dat_rcp,CONCAT(veh_ente.dat_arr,
CONCAT(veh_ente.num_pos,CONCAT(veh_ente.nom_nav,CONCAT(veh_ente.dat_etd,CONCAT(veh_ente.dat_eta,
CONCAT(veh_ente.num_voy))))))))
FROM veh_ente WHERE veh_ente.num_veh = 'UU1KSD0F537172220')
WHERE num_veh='UU1KSD0F537172220';
J'ai lu que la fonction CONCAT fonctionnait uniquement avec des chaines de type VARCHAR2 et moi dans ce que je veux faire "dat_emb", "dat_arr", "dat_etd","dat_eta" ce sont des dates
rungis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 11h57   #5
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Il est plus simple de faire
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
UPDATE veh_comm
SET com =
(
  SELECT veh_ente.dat_emb ||
             veh_ente.dat_rcp ||
             veh_ente.dat_arr ||
             veh_ente.num_pos ||
             veh_ente.nom_nav ||
             veh_ente.dat_etd ||
             veh_ente.dat_eta ||
             veh_ente.num_voy
  FROM veh_ente
  WHERE veh_ente.num_veh = 'UU1KSD0F537172220'
)
WHERE num_veh='UU1KSD0F537172220';
Ceci dit, j'ai remarqué que les noms de certaines de ces colonnes suggèrent qu'elles ne sont pas des chaines de caractères alors il est préférable d'utiliser la conversion explicite
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 13h45   #6
Invité de passage
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 3
Points : 3
Par défaut re

OK Merci ton script fonctionne, mais maintenant il y a un autre problème:
- c'est que les informations se mettent de bout en bout à la suite des autres comme ceci:
Code :
31/01/0729/01/0702/03/07RAN060095HOEGH TROTTER 21728/01/0723/02/07217
hors il faudrait pouvoir mettre dat_rcp=31/01/2007, dat_arr=29/01/2007 .... et non 31/01/200729/01/2007 ....

Merci de votre aide en tout cas
rungis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 16h02   #7
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Mais c'est à toi de faire ce que tu veux avec juste un exemple d'un bout du select interne
Code :
1
2
3
4
 
SELECT 'date_emp=' || veh_ente.dat_emb || ', ' ||
           'date_rcp=' || veh_ente.dat_rcp || ', ' ||
           ...
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web