|
|
|
Чудеса с представлениями!
|
|||
|---|---|---|---|
|
#18+
Чё-то не работает у меня конференция, поэтому заслать сюда решил. Вот, значит, на какие грабли я наступил сегодня в FB1.5: 1) Если создать триггеры на представление, а потом пересоздать это представление командой RECREATE VIEW, то все триггеры этого представления исчезут. 2) Создал таблицу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Потом создал на неё простейшее представление и триггер на неё: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Здесь MSG - это моя функция, которая выводит окошко с полученным значением. В результате я выяснил что если вставлять данные через представление, то в триггере после вставки представления значение NEW.ID будет равно NULL несмотря на то, что триггер на таблице вставил в таблицу данные с совершенно другим значеним. Хотелось бы услышать ваше мнение обо всём этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 16:35 |
|
||
|
Чудеса с представлениями!
|
|||
|---|---|---|---|
|
#18+
Commit делал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 17:10 |
|
||
|
Чудеса с представлениями!
|
|||
|---|---|---|---|
|
#18+
Ой, с COMMIT вопрос снимается - ни селу ни к городу... Твой триггер на вьюху должен ЗАНОСИТЬ данные в физическую таблицу. И все. Ну, потом - COMMIT, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 17:14 |
|
||
|
Чудеса с представлениями!
|
|||
|---|---|---|---|
|
#18+
1) Это удивляет? RECREATE - это аналог пары DROP+CREATE. А при DROP таблицы или вьюхи сервер всегда удаляет триггеры. 2) Во-первых, подтвердить не удалось. У меня в триггер вьюхи передается правильное значение. Во-вторых, не надо писать такие вещи. В FB2 это уже не работает. Триггер на вьюху должен сам вставлять данные в таблицу. Т.е. для представлений триггера работают как INSTEAD OF, независимо от того, объявлены они как BEFORE или AFTER. Текущее поведение, когда сервер делает вставку в таблицу сам, есть злостный борландовский артефакт. Если хочешь правильного поведения сервера, делай вьюху так: CREATE VIEW V AS SELECT TAB.* FROM TAB JOIN RDB$DATABASE ON 1 = 1; и строй свою логику соответственно. Это делает вьюху необновляемой и сервер самостоятельностью не занимается, только вызывает триггеры. Иначе потом нарвешся на грабли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32424183&tid=1579126]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 379ms |

| 0 / 0 |
