Bonjour,
Je suis un peu rouillé en SQL alors je viens chercher un peu d'aide.
SGBD = Oracle 10
Voilà le code simplifié de départ :
("contraintes" remplace de façon schématique toutes les conditions where qui se trouve dans mon script)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 UPDATE table1 a SET a.champ1= (SELECT a.champ2*COUNT(*) FROM table2 b WHERE contraintes); COMMIT;
Mais suite à une modification, ce code doit être valable seulement pour mes données avant 2008. A partir de 2008, il faut donc que je précise une condition :
- pour date<=2007 alors script normal
- pour date >= 2008 alors script modifié
J'ai donc fait ceci :
Mais le premier update est écrasé par le second et je n'obtiens au final qu'une mise à jour de mon champ a.champ1 pour la date>=2008. Le champ est null pour la date<=2007.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 UPDATE table1 a SET a.champ1= (SELECT a.champ2*count(*) FROM table2 b WHERE contraintes AND b.date<=2007); COMMIT; UPDATE table1 a SET a.champ1= (SELECT a.champ2*count(*) FROM table2 b WHERE contraintes AND b.date>=2008 AND b.type<>'Ancien'); COMMIT;[/COLOR]
Comment puis-je faire en sorte de faire la mise à jour pour l'ensemble de mes données (toutes les dates) avec les 2 traitements spécifiques ? Je pense qu'il faut mettre en place une contrainte mais je ne vois pas vraiment comment ?
Toute aide sera la bienvenue Merci d'avance !
Partager