![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Триггер ограничивающий удаление строк. [IB6.x]
tomat © (2002-12-18 12:07:00)Зравствуйте!
Существует ли возможность с помощью триггера (или др. средств) запретить удалять строку (запись) в зависимости от значения столбца (поля).
Спасибо!
Alexandr (2002-12-18 13:42:00) [1]давайте не будет тут про обновляемый view.
Reindeer Moss Eater (2002-12-18 13:39:00) [2]>Johnmen ©
Я вот что имел ввиду. Если триггер знает о всех строках, которые удалять нельзя, то я бы например не давал гранты на удаление из самой таблицы никому. Создал бы View, включающий все строки, которые можно удалять. И запросы на удаление делал бы к просмотру
Johnmen (2002-12-18 13:26:00) [3]>Reindeer Moss Eater (18.12.02 13:16)
Ничего подобного !
>tomat
Возбуждать ексепшн есть стандартное, абсолютно правильное решение.
Reindeer Moss Eater (2002-12-18 13:16:00) [4]Ну триггер, обламывающий DELETE - это не меньшее извращение
Romkin (2002-12-18 13:06:00) [5]Извращение...
Reindeer Moss Eater (2002-12-18 13:04:00) [6]И что без исключения ника нельзя?!
Можно.
Например делать Insert удаляемой записи в триггере на BEFORE DELETE :)
Romkin (2002-12-18 13:02:00) [7]Никак, да и exit имеет полностью тот же смысл, что и в Delphi, и запись удалится. На клиенте обычно сообщение и требуется, почему нельзя удалить, поэтому и exception
tomat (2002-12-18 12:49:00) [8]И что без исключения ника нельзя?!
Sergey Masloff (2002-12-18 12:44:00) [9]EXIT
Jumps to the final END statement in the procedure. Available in stored procedures only.
~~~~~~~~~~~~~~~~~
tomat (2002-12-18 12:40:00) [10]CREATE TRIGGER TEST_TRIGGER FOR TEST
ACTIVE
BEFORE DELETE
AS
BEGIN
IF ( OLD.CODE = 0 ) THEN EXIT;
END^
Ошибочка, в чём косяк не пойму!
EXIT по английски!
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown.
EXIT.
FreeLancer (2002-12-18 12:14:00) [11]BEFORE DELETE
...
AS
BEGIN
IF (Pole = "Bad Value") THEN EXCEPTION MyException;
END
или
...
AS
BEGIN
IF (Pole = "Bad Value") THEN EXIT; /* По-тихому */
END
Romkin (2002-12-18 12:09:00) [12]Можно, достаточно дать exception в нужный момент, и вся транзакция откатится. Ессно, before delete