Sybase - синтаксическая ошибка при создании TRIGGER - PullRequest
0 голосов
/ 08 марта 2011

Я получаю «Неверный синтаксис рядом с« ПОСЛЕ ».»при попытке создать триггер ниже

CREATE TRIGGER TR_UPDATE_TEST
AFTER UPDATE OF TEST_NAME
    ON EW_TEST
REFERENCING OLD AS old_data 
NEW AS new_data
FOR EACH ROW
BEGIN
    Insert into EW_TEST_AUDIT (TEST_ID, TEST_NAME_OLD, TEST_NAME_NEW, TEST_ADDRESS_OLD, TEST_ADDRESS_NEW, TEST_MODIFIED_BY_ID, TEST_MODIFIED_DATE)
    Values(old_data.TEST_ID, old_data.TEST_NAME, new_data.TEST_NAME, old_data.TEST_ADDRESS, new_data.TEST_ADDRESS, null, sysdate());
END

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 25 августа 2015

Скорее всего, ваша версия Sybase не поддерживает триггеры AFTER UPDATE.

В настоящее время я сталкиваюсь с той же проблемой с моей версией Sybase и ищу обходной путь ...

С уважением, vfrrjq

0 голосов
/ 29 марта 2011

Это похоже на триггер из продукта Sybase SQL Anywhere.В частности, один из них использует Watcom SQL Dialect.

Одна вещь, которая бросается в глаза, это то, что вы пропустили оператор заказа.См. Ваше утверждение с включенным предложением заказа ...

CREATE TRIGGER TR_UPDATE_TEST
AFTER UPDATE OF TEST_NAME ORDER 1
ON EW_TEST
REFERENCING OLD AS old_data
NEW AS new_data
FOR EACH ROW
BEGIN
     Insert into EW_TEST_AUDIT (TEST_ID, TEST_NAME_OLD, TEST_NAME_NEW, TEST_ADDRESS_OLD, TEST_ADDRESS_NEW, TEST_MODIFIED_BY_ID, TEST_MODIFIED_DATE)
     Values(old_data.TEST_ID, old_data.TEST_NAME, new_data.TEST_NAME, old_data.TEST_ADDRESS, new_data.TEST_ADDRESS, null, sysdate());
END

Конечно, предложение ORDER является необязательным, однако, не зная, какие другие триггеры есть в этой таблице, вы вполне могли бы подумать о том, чтобы иметь большезатем один триггер на этой таблице.Если это так, то вы должны использовать предложение ORDER.

В соответствии с файлом справки Sybase SQL Anywhere ...

Если вы опустите предложение ORDER или укажите 0,сервер базы данных назначает порядок 1. Однако, если для другого триггера того же типа уже установлено значение 1, возвращается ошибка.

При добавлении дополнительных триггеров может потребоваться изменитьсуществующие триггеры того же типа для события, в зависимости от того, взаимодействуют ли действия триггеров.Если они не взаимодействуют, новый триггер должен иметь значение ORDER выше, чем существующие триггеры.Если они взаимодействуют, вам нужно подумать о том, что делают другие триггеры, и вам, возможно, придется изменить порядок их запуска.

Кроме того, я думаю, что все остальное выглядит хорошо в вашемспусковой крючок.Может быть, вы могли бы попытаться добавить владельца таблицы перед именем таблицы?dba.EW_TEST (пример)

Кроме того, вы можете зайти на новый форум, созданный Sybase, который похож на stackoverflow ...

http://sqlanywhere -forum.sap.com/

Это место, где можно задавать вопросы, относящиеся к линейке продуктов Sybase SQL Anyhwere.

Надеюсь, это вам поможет.

...