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 03/01/2008, 11h06   #1
Futur Membre du Club
 
Inscription : mai 2007
Messages : 31
Détails du profil
Informations personnelles :
Âge : 28
Localisation : Belgique

Informations forums :
Inscription : mai 2007
Messages : 31
Points : 15
Points : 15
Par défaut Update avec order by

Bonjour et bonne année à tous,

Je m'excuse si la question a déjà été posée, ce qui me semble probable, mais je n'ai pas trouvé...

Voici mon code:
Code :
1
2
3
4
5
6
7
8
UPDATE cmc_sim_simulation 
SET id_person = 
nvl((SELECT pim_id FROM etl_out_quoterequest
WHERE sales_process_id = id_simulation
AND pim_id IS NOT NULL
AND rownum = 1
AND processed = 0
ORDER BY time_stamp DESC), id_person);
et l'erreur que j'obtiens: ORA-00907: missing right parenthesis


Je cherche en fait à faire mettre dans le champ id_person le pim_id le plus récent trouvé pour la simulation dans la table etl_out_quoterquest
angebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h07   #2
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 faut mettre nvl dans le select ...
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h12   #3
Futur Membre du Club
 
Inscription : mai 2007
Messages : 31
Détails du profil
Informations personnelles :
Âge : 28
Localisation : Belgique

Informations forums :
Inscription : mai 2007
Messages : 31
Points : 15
Points : 15
ça ne marche pas mieux comme ça...

Et avec le nvl en dehors, si je retire la clause order by ça fonctionne
angebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h44   #4
Membre Expert
 
Homme
Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)
Inscription : mars 2003
Messages : 645
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)

Informations forums :
Inscription : mars 2003
Messages : 645
Points : 1 165
Points : 1 165
normal le ORDER BY est interdit dans l'UPDATE.

Regardes ce lien qui réponds aussi par la négation sur l'utilisation de ORDER BY dans UPDATE, et donnes quelques pistes.

edit: Expliques ce que tu cherches à faire.
phili_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h55   #5
Membre Expert
 
Homme
Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)
Inscription : mars 2003
Messages : 645
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)

Informations forums :
Inscription : mars 2003
Messages : 645
Points : 1 165
Points : 1 165
Citation:
Envoyé par angebe Voir le message
Je cherche en fait à faire mettre dans le champ id_person le pim_id le plus récent trouvé pour la simulation dans la table etl_out_quoterquest
En relisant ta requête je te proposes quelque chose comme cela:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
UPDATE cmc_sim_simulation 
SET id_person = (
    SELECT id_person FROM etl_out_quoterequest
    WHERE (pim_id,sales_process_id,time_stamp) IN 
        (SELECT pim_id,sales_process_id,MAX(time_stamp)
        FROM etl_out_quoterequest
        WHERE pim_id IS NOT NULL
        AND processed = 0
        GROUP BY pim_id,sales_process_id
        )
     AND    sales_process_id = id_simulation
    )
phili_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 14h43   #6
Futur Membre du Club
 
Inscription : mai 2007
Messages : 31
Détails du profil
Informations personnelles :
Âge : 28
Localisation : Belgique

Informations forums :
Inscription : mai 2007
Messages : 31
Points : 15
Points : 15
Merci mais je pense avoir la solution, il fallait faire un 2ème niveau de sous-requête:

Code :
1
2
3
4
5
6
7
8
9
10
11
 
UPDATE cmc_sim_simulation 
SET id_person = 
nvl(
(SELECT pim_id 
FROM 
(SELECT pim_id, sales_process_id FROM etl_out_quoterequest
WHERE processed = 0
ORDER BY time_stamp DESC) 
WHERE sales_process_id = id_simulation AND rownum = 1)
, id_person);
C'est en cours de test (ce n'est qu'un morceau d'un long script)
angebe 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 13h48.


 
 
 
 
Partenaires

Hébergement Web