2010-02-23 23 views
5

Parece que derby no admite instrucciones condicionales [IF]. ¿Cómo escribimosdeclaraciones condicionales en derby

if exists (select 1 from customers where name='somename') 
    update customers ... 
else 
    insert into customers ... 

in derby? Derby no tiene 'reemplazar en' de mysql tampoco.

Nota: Estoy utilizando derby como reemplazo de pruebas unitarias para mysql [que es producción usará mysql y unit-test usará derby].

Respuesta

2

¿Qué hay de http://db.apache.org/derby/docs/10.2/ref/rrefcasenullif.html#rrefcasenullif?

CASE 
     WHEN 1 = 2 THEN 3 
     WHEN 4 = 5 THEN 6 
     ELSE 7 
    END 

Así que tal vez usted puede intentar algo como:

CASE 
WHEN select 1 from customers where name='somename' = 1 THEN update... 
ELSE insert... 
END 

tengo ni idea de si eso funcionaría, pero parece que un comienzo. ¡Buena suerte!

editar: Después de probar algunas de estas cosas ... No sé si esto realmente te ayudará. No parece que puedas disparar el interruptor entre SELECT e INSERT; tiene que ser uno o el otro y el CASO va adentro. Lo que desea hacer puede o no ser posible ...

+0

Esto no funcionará. La base de datos Derby mal documentada no menciona que la cláusula CASE solo se puede usar como parte de otra cláusula SQL, p. SELECCIONAR. Por ejemplo, COUNT SELECT CASE (*) CUANDO 1 ENTONCES 10 ELSE 20 FIN DE

DONDE Andreas