2010-09-07 6 views
2

Pl code ci-dessous trouvermise à jour conditionnelle sur la même colonne

SQL> desc aaa 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ENAME            VARCHAR2(1) 

SQL> select * from aaa; 

E 
- 
2 
2 
2 
5 
5 
5 
5 

7 rows selected. 

je dois mettre à jour 2 avec 5 et 5 avec 2 avec un seul sql.

Répondre

4
update aaa set ename = translate(ename, '25', '52') 

ou

update aaa set ename = decode(ename, '5', '2', '2', '5', ename) 
+0

Ceci est vraiment intéressant .. –

+0

La première positionnera 'ename' à NULL si elle n'était ni '2' ni '5'. Une clause 'WHERE' devrait être ajoutée. –

+0

ce ne sera pas, au moins dans mon 9i. vérifiez ceci: 'select translate ('7', '25', '52') de dual'. –

3

Selon les informations fournies et exigence:

Dans t-sql, vous pouvez le faire comme

update aaa set Ename = case when Ename = '2' then '5' else '2' end 

Modifier instruction case avec oracle équivalent

+1

+1 La syntaxe pour Oracle est identique. –

6
update 
    aaa 
set 
    ENAME = case when ENAME = '2' then '5' else '2' end 
where 
    ENAME in ('2', '5') 
0
UPDATE aaa 
SET E = 7 - E 
WHERE E IN (5,2) 
+0

E est varchar, je me demande si cela va fonctionner? – Constantin

+0

Non ce ne serait pas. Aussi ce qui arriverait à une rangée où E = 4? –

+0

'set E = to_char (7 - to_number (E))' –

Questions connexes