Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неоднозначность CHECK в Interbase 7 / 5 сообщений из 5, страница 1 из 1
07.07.2004, 23:16:41
    #32594339
serge_mx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неоднозначность CHECK в Interbase 7
Странное дело. Как известно при создании ограничения CHECK на значение какого-либо поля для таблицы создаются два системных триггера BEFORE INSERT и BEFORE UPDATE. Но можно создать и свой триггер BEFORE INSERT, который при добавлении записи будет задавать значение этого поля (самый простой пример – автоинкрементный ключ). Так вот, возможна ситуация, когда сначала создается ограничение, а потом мой триггер. Получаем в итоге два триггера, причем триггер для проверки ограничения будет выполняться раньше, чем мой. В IB7 это приводит к возникновению исключения при попытке вставить запись со значением, не удовлетворяющим условию CHECK (хотя в моем триггере значению устанавливается правильно). Если же сначала создать свой триггер, а потом ограничение CHECK, то все проходит без ошибок. В IB5 все работает как надо в любом случае, к чему такая неоднозначность в седьмом (кстати и в шестом)?
...
Рейтинг: 0 / 0
08.07.2004, 07:22:22
    #32594441
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неоднозначность CHECK в Interbase 7
По-моему, так и должно быть. Ведь CHECK это ограничение на значения самого столбца, поэтому должно иметь самый высокий приоритет. Если у тебя бывают конфликты значений, то может быть ты неправильно определил для себя CHECK?
...
Рейтинг: 0 / 0
08.07.2004, 11:23:07
    #32594911
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неоднозначность CHECK в Interbase 7
Winni-PoohПо-моему, так и должно быть. Ведь CHECK это ограничение на значения самого столбца, поэтому должно иметь самый высокий приоритет. Если у тебя бывают конфликты значений, то может быть ты неправильно определил для себя CHECK?
Ч...
Чепуха.
Поразмышляй по аналогии с NOT NULL и триггером BEFORE INSERT.
...
Рейтинг: 0 / 0
08.07.2004, 13:22:18
    #32595334
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неоднозначность CHECK в Interbase 7
Помнится была бага, исправленная в FB1, относительно того, что триггеры для CHECK в IB6 создавались на BEFORE, а не AFTER. Я не использовал IB старше шестого, но как-то не вериться что борланды не исправили это у себя до сих пор...
...
Рейтинг: 0 / 0
08.07.2004, 21:52:06
    #32596413
serge_mx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неоднозначность CHECK в Interbase 7
Ну вообще-то CHECK - ограничение на наличие правильных данных в таблице, а триггер BEFORE выполняется, понятное дело, перед всавкой/изменениями, по логике вещей значение в этот момент еще не вставлено/изменено и проверять его CHECK как-то нелогично.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неоднозначность CHECK в Interbase 7 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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