условные заявления в дерби - PullRequest
6 голосов
/ 23 февраля 2010

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

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

в дерби? Дерби также не имеет «замены в» MySQL.

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

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Как насчет 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

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

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

1 голос
/ 10 февраля 2019

Я знаю, что это может быть слишком поздно, но в случае, если кто-то все еще ищет это:

СЛИЯНИЕ

https://issues.apache.org/jira/browse/DERBY-3155

Например:

MERGE INTO customers USING SYSIBM.SYSDUMMY1 ON customers.name='somename' WHEN MATCHED THEN UPDATE SET name = 'someothername', ... WHEN NOT MATCHED THEN INSERT(id, name, ...) VALUES (DEFAULT, 'someothername', ...)

...