Update avec jointure : des évolutions ?
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) :
Code:
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'
); |
(codsoc = 100, codlan = 'ITA' et prm.tradesig4 = 'IVA21' permettant de retrouver les lignes que j'ai modifié).
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.