Expressão condicional no Oracle

Pessoal,

gostaria de fazer um update com a seguinte lógica:

update tabela1 set campo1 = valor1 where condição1 set campo1 = valor2 where condição2 set campo1 = valor3 where condição3 set campo1 = valor4 where condição4

ou seja, o campo a ser atualizado é sempre o mesmo, mas o valor a ser atribuído depende de uma dada condição.

Uma alternativa seria fazer vários updates, mas eu preciso que o efeito geral de todos os updates seja percebido como atomico.

Outra alternativa seria usar locks e varios updates, mas eu nao gostaria de assumir a responsabilidade de evitar deadlocks e race conditions.

Entao, imaginei que com uma expressao condicional (veja bem, expressao condicional, e nao comando condicional) eu consigo isto. Em uma sintaxe java-like, seria algo assim:

update tabela1 set campo1 = (condição1 ? valor1 : (condição2 ? valor2 : (condição3 ? valor3 : (condição4 ? valor4 : campo1))))

ou ainda

update tabela1 set campo1 = (condição1 ? valor1 : (condição2 ? valor2 : (condição3 ? valor3 : valor4))) where condicao1 or condicao2 or condicao3 or condicao4

Existe expressao condional no sql do Oracle???

Alguém sugere uma outra abordagem???

Valew!!!

Dê uma olhada:

CASE-WHEN
http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/case_statement.htm

DECODE
http://download-east.oracle.com/docs/cd/B19188_01/doc/B15917/squse.htm#sthref112

Opa! Funcionou! No caso, a espressão condicional é o CASE WHEN, e ficou algo assim:

update tabela1 set campo1 = case when condicao1 then valor1 when condicao2 then valor2 when condicao3 then valor3 else valor4 end where condicao1 and condicao2 and condicao3 and condicao4

obrigado!!!