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

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

Код: 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
Отмена вставки в Insert Trigger
    #35019751
Ethereal21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во, ключевое слово Rollback Trigger . Спасибо )
...
Рейтинг: 0 / 0
Отмена вставки в Insert Trigger
    #35021191
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше было бы не молча отменять вставку а кидать ошибку.

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

самое интересное, что независимо от того, какой тригер (before, after, row, statement) запись не вставляется =/, глюк?
пробовал на тестовой табличке с 2-мя полями ASA 9.0.2 3320
...
Рейтинг: 0 / 0
Отмена вставки в Insert Trigger
    #35022214
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.

Хотя с выдачей ошибки клиенту правильнее. У ж ватком так ватком.
...
Рейтинг: 0 / 0
Отмена вставки в Insert Trigger
    #35024315
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Отмена вставки в Insert Trigger
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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