Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Отмена вставки в Insert Trigger / 8 сообщений из 8, страница 1 из 1
19.12.2007, 09:59
    #35019386
Ethereal21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
В общем, в вопросах SQL я нуб. Понадобилось написать триггер, который может отменять вставку записей. Отыскал пример, в котором написано, что это делается с помощью rollback. Все вроде бы в порядке, но при сохранении триггера rollback превращается в rollback work и при вставке в таблицу происходит ошибка "COMMIT/ROLLBACK not allowed within atomic operation". При попытке заменить rollback на rollback transaction sybase начинает рассматривать код триггера как написанный на TSQL (по умолчанию Watcom), начинает на другие вещи ругаться, на Order, на то, что не знает псевдонима inserted и т.д.

Может кто-нибудь дать пример, как отменить вставку, либо на Watcom, либо на Transact?
Спасибо заранее.
...
Рейтинг: 0 / 0
19.12.2007, 10:15
    #35019432
Ethereal21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
Забыл сказать, что делаю это в ASA 7
...
Рейтинг: 0 / 0
19.12.2007, 11:10
    #35019644
Рыжий Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
попробовал вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
ALTER TRIGGER "insert" BEFORE INSERT
ORDER  1  ON "DBA"."table2"
/* REFERENCING NEW AS new_name */
FOR EACH ROW /* WHEN( search_condition ) */
BEGIN
	rollback trigger
END

ничего не выскакивает
...
Рейтинг: 0 / 0
19.12.2007, 11:35
    #35019751
Ethereal21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
Во, ключевое слово Rollback Trigger . Спасибо )
...
Рейтинг: 0 / 0
19.12.2007, 17:10
    #35021191
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
А еще лучше было бы не молча отменять вставку а кидать ошибку.

Вместо rollback trigger напиши что-то в духе:
Код: plaintext
    RAISERROR  30001  'You can not insert this row because...';
Тогда клиент будет знать что вставка была отменена по такой-то причине.
rollback trigger отменит только изменения сделанные в самом триггере, но не отменит вставку записей которая дернула триггер.
...
Рейтинг: 0 / 0
20.12.2007, 08:04
    #35022187
Рыжий Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
White Owlrollback trigger отменит только изменения сделанные в самом триггере, но не отменит вставку записей которая дернула триггер.

самое интересное, что независимо от того, какой тригер (before, after, row, statement) запись не вставляется =/, глюк?
пробовал на тестовой табличке с 2-мя полями ASA 9.0.2 3320
...
Рейтинг: 0 / 0
20.12.2007, 08:35
    #35022214
V.V.L.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
SQL Anywhere does provide the Adaptive Server Enterprise-compatible ROLLBACK TRIGGER statement to undo actions within triggers

The ROLLBACK TRIGGER statement rolls back the work done in a trigger, including the data modification that caused the trigger to fire.

Хотя с выдачей ошибки клиенту правильнее. У ж ватком так ватком.
...
Рейтинг: 0 / 0
20.12.2007, 17:29
    #35024315
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отмена вставки в Insert Trigger
V.V.L.SQL Anywhere does provide the Adaptive Server Enterprise-compatible ROLLBACK TRIGGER statement to undo actions within triggers

The ROLLBACK TRIGGER statement rolls back the work done in a trigger, including the data modification that caused the trigger to fire.

Хотя с выдачей ошибки клиенту правильнее. У ж ватком так ватком.Главу полностью читать надо. Последний абзац:
SQL Anywhere® Server - SQL Reference > SQL Statements > ROLLBACK TRIGGER statementIf a ROLLBACK TRIGGER statement is used within a nested trigger and without a RAISERROR statement, only the innermost trigger and the statement which caused it to fire are undone.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Отмена вставки в Insert Trigger / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]