Requête conditionnelle + Update (Oracle 10g)
Bonjour à tous :)
Je penche sur un problème délicat.. Je cherche désespérément et teste plusieurs choses depuis ce matin, mais rien de fort concluant.. :?
Je possède cette table "CONTRAT" (c'est une table d'essai, mais qui me sert pour faciliter l'explication ici, et le principe est le même que la table principale que je souhaite manipuler) :
Code:
1 2 3 4 5 6
|
NUM LIBELLE ID_CLIENT COLSUP
--------- -------------------- ---------- -----------
1 00Location 1
6 00Vente 3
7 00Cession 5 |
L'idée serait par exemple d'insérer la valeur "OUI" dans la colonne "COLSUP" lorsque la ligne courante possède le libellé "00Cession" et lorsque l'ID client vaut "5".
/!\ IMPORTANT : Je ne veux pas faire quelque chose dans le style "...WHERE Libelle='00Cession' AND ID_client='5';" .. Ca serait trop simple :P Je recherche bien à le faire de manière conditionnelle (car la table finale que je dois manipuler comporte beaucoup de condition etc.. /!\
Imaginez que la table comporte beaucoup de lignes (ici c'est juste pour l'exemple).
J'ai donc créé cette requête, par le moyen de la fonction "decode" :
Code:
1 2 3 4 5 6
|
UPDATE contrat
set COLSUP=decode(LIBELLE,'00Cession',decode(
(select ID_client
from contrat
where rownum<2),5,'OUI')); |
Théoriquement ça paraît correcte.. Mais le soucis c'est qu'Oracle travaille comme ceci (du moins je crois) :
Apparemment il passe toutes les lignes les unes après les autres, et une fois à la 3ème ligne, il trouve bien "00Cession"! Jusque là pas de soucis! Seulement au moment de regarder l'ID_CLIENT, c'est L'ID de la première ligne qu'il regarde! Je n'obtiens donc jamais le mot "OUI" dans la 3ème ligne de la colonne "COLSUP"...
Je me demande donc comment dire à Oracle de toujours faire le select sur la valeur courante de la ligne (et non pas de reprendre la première à chaque fois)..
Je pense que le "rownum<2" est en cause, mais je ne vois pas par quoi le remplacer... J'ai pu lire de virer le "rownum<2" pour mettre un distinct après mon select, mais toujours le même problème..
Merci beaucoup ;)