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 20/05/2011, 11h54   #1
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Par défaut Question sur Merge

bonjour à tous,

j'ai quelques difficultés avec l'instruction Merge.

je voudrais que la table (Merge Into) sur laquelle je ferais les mises à jour contienne un "Where", car ces mises à jour ne concernent qu'une partie de la table.

Merci à vous.
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 14h00   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par AbouZaid Voir le message
j'ai quelques difficultés avec l'instruction Merge.
MERGE
Citation:
Envoyé par AbouZaid Voir le message
je voudrais que la table (Merge Into) sur laquelle je ferais les mises à jour contienne un "Where", car ces mises à jour ne concernent qu'une partie de la table.
C'est précisément ce que fait la requête de Waldar de ton précédent post...
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 17h21   #3
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
salut et merci pour le lien.

En fait Waldar a ajouté un "Where" en fin de la requête mais j'avais de besoin de :
Code :
Merge INTO TABLE WHERE...
C'est bon merci, j'ai trouvé.

Mais on ne peut pas faire :

Code :
1
2
3
...
When matched then UPDATE ...
when NOT matched then UPDATE...
??
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 17h39   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par AbouZaid Voir le message
En fait Waldar a ajouté un "Where" en fin de la requête mais j'avais de besoin de :
Code :
Merge INTO TABLE WHERE...
Je ne comprends pas, Waldar a ajouté le WHERE où c'est syntaxiquement correct tout en étant conforme au besoin.
Citation:
Envoyé par AbouZaid Voir le message
Mais on ne peut pas faire :
Code :
1
2
3
...
When matched then UPDATE ...
when NOT matched then UPDATE...
Pareil je ne comprends pas si "when NOT matched" alors il faut INSERT, re-regarde le lien, c'est bien évidemment la base de MERGE...
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 17h41   #5
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Dans mon besoin, il faut que update la table(col1) quand 'Matched' et update la table(Col2) when not matched.
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 10h15   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Alors il faut faire du PL/SQL, MERGE ne permet pas de faire ça
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h14   #7
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Ok merci.

Je clôture ce post alors..
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h36   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Penses à utiliser ROWCOUNT
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h41   #9
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
j'utilise ROWCOUNT pour connaitre le nombre de lignes mises à jour après une requête, mais pas pour optimiser...
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h51   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
C'est juste plus rapide de faire :
Code :
1
2
3
UPDATE t1
IF SQL%ROWCOUNT = 0 THEN
UPDATE t2
Que compter les lignes et faire un update ou l'autre selon le résultat
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 12h10   #11
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Oui, mais mon besoin ici est :
Voir s'il y a une correspondance entre 2 table, ligne par ligne :

- Si c'est le cas Update la col1 de la table
- Sinon update la col2 de la table.
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 12h22   #12
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
OK, j'avais pas compris. A ce moment là, il suffit d'utiliser CASE dans une sous-requête de l'UPDATE
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 12h40   #13
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Le case avec un ?
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h46   #14
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Non :

Code :
1
2
UPDATE t1 
SET (col1,col2) = (SELECT CASE ... ELSE )
Mais bon... j'suis en train de me dire que 2 UPDATE sera plus simple et même peut-être plus rapide
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h53   #15
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
c'est ce que j'ai fait.

En fait mon package fait beaucoup de mises à jour et crée et supprime plus de 30 index dynamiquement !!!
AbouZaid 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 16h15.


 
 
 
 
Partenaires

Hébergement Web