2010-02-23 3 views
5

Похоже, derby не поддерживает условные операторы [IF]. Как мы пишемусловные заявления в дерби

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

в дерби? У Derby тоже нет «замены в» mysql.

Примечание: Я использую дерби в качестве замены модуля для mysql [это будет использование mysql, а unit-test будет использовать дерби].

ответ

2

Что относительно 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 

Так может быть, вы можете попробовать что-то вроде:

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

Я понятия не имею, если это будет работать, но это похоже на старт. Удачи!

Редактировать: После того, как вы попробуете несколько из этих вещей ... Я не знаю, действительно ли это вам поможет. Кажется, что вы не можете переключаться между SELECT и INSERT; он должен быть тем или иным, и CASE входит внутрь. То, что вы хотите сделать, может быть или может быть невозможно ...

+0

Это не сработает. Плохо задокументированная Derby DB не упоминает, что предложение CASE может использоваться только как часть другого предложения SQL, например. ВЫБРАТЬ. Например, Select Case COUNT (*) ПРИ 1 ТОГДА 10 ELSE 20 END ОТ

ГДЕ Andreas