СОЗДАТЬ ТРИГГЕР с условием в Дерби

90
13

Я должен написать инструкцию для запуска sql update для Apache Derby. Обычно я работаю с Sql Server и T-SQL. Но теперь я должен использовать Дерби. К сожалению, я очень новичок в Derby, и я не смог найти правильное решение в руководстве Derby.

Моя проблема в том, что я должен проверить условие в триггере обновления и на основании результата этого условия я бы сделал либо UPDATE, либо INSERT, поэтому в T-SQL я бы использовал условие IF-ELSE. Может кто-нибудь сказать мне, что эквивалент в Дерби или альтернативный способ? Я уже рассматривал предложение WHEN, но это кажется неправильным направлением.

У меня есть код до сих пор:

CREATE TRIGGER UPDATE_EVENTS
AFTER UPDATE
ON ACCIDENTS
REFERENCING OLD AS oldRow NEW AS newRow
FOR EACH ROW MODE DB2SQL

-- In the following, I would usually use an IF-ELSE Statement,
-- but I can't use this in Derby. So I tried the optional WHEN Statement,
-- but there I could not have an else "path", right?

-- This should be the If-Case
WHEN((SELECT COUNT(*) FROM VIEW_EVENTS WHERE ID_DATE = newRow.ID_DATE) > 0)
UPDATE VIEW_EVENTS
SET DETAILS = newRow.DETAILS,
PARTICIPANTS = newRow.PARTICIPANTS
WHERE ID_DATE = newRow.ID_DATE

-- And this should be the else case
WHEN((SELECT COUNT(*) FROM VIEW_EVENTS WHERE ID_DATE = newRow.ID_DATE) <= 0)
INSERT INTO VIEW_EVENTS
( ID_KEY,
ID_DATE,
DETAILS,
PARTICIPANTS
)
VALUES
( newRow.ID_KEY,
newRow.ID_DATE,
newRow.DETAILS,
newRow.PARTICIPANTS
);

Это выражение - всего лишь мини-пример, чтобы показать вам мою проблему. Я надеюсь, что вы можете помочь мне :).

С наилучшими пожеланиями,

Шерген

спросил(а) 2017-09-15T18:11:00+03:00 3 года, 10 месяцев назад
1
Решение
64

Не помещайте без разбора. Ваш вопрос не имеет никакого отношения к серверу sql.

Но кажется, что ваша цель не достижима напрямую - как обсуждалось (вы искали?) Здесь. Derby не поддерживает триггеры с несколькими операторами. Кажется, вам нужно использовать несколько триггеров.

ответил(а) 2017-09-15T18:45:00+03:00 3 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема