Bonjour,
Je travaille sous Oracle 10.1.0.5.0
J'ai une table "pro" dont la clé est "codsoc, codpro".
J'ai une seconde table "prm" dont la clé est "codsoc, codpro, codlan".
J'ai modifié en masse la table "prm". J'ai modifié ces champs "datmod et utimod" avec la date du jour et mon nom afin d'avoir une trace de qui a modifié ces libellés de produits.
Maintenant, je désire mettre à jour la table "pro" avec le même datmod et utimod pour toutes les lignes que j'ai modifié dans "prm" (en reprenant la liaison sur codsoc, codpro).
Voici la requête que j'ai écrit (qui fonctionne) :
(codsoc = 100, codlan = 'ITA' et prm.tradesig4 = 'IVA21' permettant de retrouver les lignes que j'ai modifié).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 update pro set (datmod, utimod) = ( select prm.datmod, prm.utimod from prm where prm.codsoc = 100 and prm.codlan = 'ITA' and prm.tradesig4 = 'IVA21' and prm.codpro = pro.codpro ) where (codsoc, codpro) in ( select prm.codsoc, prm.codpro from prm where prm.codsoc = 100 and prm.codlan = 'ITA' and prm.tradesig4 = 'IVA21' );
Comme on voit, on retrouve deux fois plus ou moins la même sous-requête. Outre le problème de performances, cette écriture est particulièrement crade.
Existe-t-il une syntaxe plus propre ?
SQL Server permet notamment les jointures sur les update, ce qui rend l'écriture de telles requêtes de mise à jour plus simple.
Partager