|
|
|
Неоднозначность CHECK в Interbase 7
|
|||
|---|---|---|---|
|
#18+
Странное дело. Как известно при создании ограничения CHECK на значение какого-либо поля для таблицы создаются два системных триггера BEFORE INSERT и BEFORE UPDATE. Но можно создать и свой триггер BEFORE INSERT, который при добавлении записи будет задавать значение этого поля (самый простой пример – автоинкрементный ключ). Так вот, возможна ситуация, когда сначала создается ограничение, а потом мой триггер. Получаем в итоге два триггера, причем триггер для проверки ограничения будет выполняться раньше, чем мой. В IB7 это приводит к возникновению исключения при попытке вставить запись со значением, не удовлетворяющим условию CHECK (хотя в моем триггере значению устанавливается правильно). Если же сначала создать свой триггер, а потом ограничение CHECK, то все проходит без ошибок. В IB5 все работает как надо в любом случае, к чему такая неоднозначность в седьмом (кстати и в шестом)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2004, 23:16:41 |
|
||
|
Неоднозначность CHECK в Interbase 7
|
|||
|---|---|---|---|
|
#18+
По-моему, так и должно быть. Ведь CHECK это ограничение на значения самого столбца, поэтому должно иметь самый высокий приоритет. Если у тебя бывают конфликты значений, то может быть ты неправильно определил для себя CHECK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 07:22:22 |
|
||
|
Неоднозначность CHECK в Interbase 7
|
|||
|---|---|---|---|
|
#18+
Winni-PoohПо-моему, так и должно быть. Ведь CHECK это ограничение на значения самого столбца, поэтому должно иметь самый высокий приоритет. Если у тебя бывают конфликты значений, то может быть ты неправильно определил для себя CHECK? Ч... Чепуха. Поразмышляй по аналогии с NOT NULL и триггером BEFORE INSERT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 11:23:07 |
|
||
|
Неоднозначность CHECK в Interbase 7
|
|||
|---|---|---|---|
|
#18+
Помнится была бага, исправленная в FB1, относительно того, что триггеры для CHECK в IB6 создавались на BEFORE, а не AFTER. Я не использовал IB старше шестого, но как-то не вериться что борланды не исправили это у себя до сих пор... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 13:22:18 |
|
||
|
Неоднозначность CHECK в Interbase 7
|
|||
|---|---|---|---|
|
#18+
Ну вообще-то CHECK - ограничение на наличие правильных данных в таблице, а триггер BEFORE выполняется, понятное дело, перед всавкой/изменениями, по логике вещей значение в этот момент еще не вставлено/изменено и проверять его CHECK как-то нелогично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 21:52:06 |
|
||
|
|

start [/forum/topic.php?fid=40&gotonew=1&tid=1578296]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 384ms |

| 0 / 0 |
