2016-07-28 5 views
-1

У меня есть следующий триггер, который запускает вставку на THAT_TABLE всякий раз, когда есть вставка или обновление до THIS_TABLE.Ошибка триггера DB2

Следующий запрос работает так же, как и должен. Аналогично - он работает, когда я комментирую line-A и удаляем or in) line-B.

create or replace trigger t99 
    after 
    update -- line-A 
    --or insert -- line-B 
    on THIS_TABLE 
    REFERENCING new as newRow 
    for each row MODE DB2SQL 
    insert into THAT_TABLE 
     values (newRow.tnumber, 'O', newRow.cocode, CURRENT TIMESTAMP, null, null) 

Однако, я получаю следующее сообщение об ошибке, когда я раскомментировать обе строки:

Неожиданный маркер «ИЛИ ВСТАВИТЬ» был найден следующий «». Ожидаемые токены могут включать в себя: «» .. SQLCODE = -104, SQLSTATE = 42601, DRIVER = 4.21.29

Что не хватает?

Я бегу DB2 9.1 на Windows 10

+1

Чего не хватает? Ваша версия и платформа DB2 для начинающих. – mustaccio

ответ

1

Попробуйте вмещающих ваше заявление в END блока BIGIN как в моем примере:

create table test.triggerevent (id int, text varchar(50))@ 
create table test.log (id int, text varchar(50), ts timestamp)@ 

create or replace trigger tlog 
    after update or insert 
    on test.triggerevent 
    referencing new as newRow 
    for each row mode db2sql 
    begin 
    insert into test.log values (newRow.ID, newRow.text, current timestamp); 
    end 
    @ 
+0

является «@» в конце намеренного или опечатки? – user6401178

+0

У вас должны быть два терминатора ";" это один из кодов запуска, и я использовал «@» как второй (внешний). Вы можете указать этот termoinator в DataStudio на вкладке проверки или через командную строку с db2 -td @ ​​... – MichaelTiefenbacher

+0

Я все еще получаю ошибку - попробовал это с помощью & witout '@'. не получив на этот раз конкретный код ошибки, а окно появляется по пути, говоря «ошибка при выполнении последнего оператора (ов)», спрашивая меня, продолжать ли. – user6401178

Смежные вопросы