![]() |
|
Модераторы: skyboy |
![]()
|
|
| Carolina1212 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.12.2010 Репутация: нет Всего: нет |
Передо мной такая задача:
Cоздать триггер, который устанавливает в поле stud.telephone значение NULL при удалении номера. Код триггера:
Он скомпилировался, но когда я создаю условия для его выполнения (удаляю номер в поле stud.telephone), выдает ошибку: ![]() Подскажите пожалуйста, что не так и как исправить?! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Правильно. Нельзя в триггере вносить изменения в таблицу, на которую повешен триггер (причём по совершенно очевидным причинам). Это описано в документации. И там же описано, как это ограничение "объехать". Уж не поленитесь почитать, а?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
А для меня вот, эти ограничения, если честно, совсем не очевидны. Лишь с натяжкой и весьма не уверенно, путанно могу попытаться обосновать для оракли, но не для маськи -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Триггер выполняет обновление, обновление запускает триггер, триггер выполняет обновление... вечный кайф, одним словом...
Представь, что триггер ТС заработает... и выполняется запрос
Это сообщение отредактировал(а) Akina - 13.12.2010, 17:36 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Akina, однакож в триггерной логике можно реализовать и условия выхода из рекурсии. Недопущение рекусрсии это какойто слабый аргумент, мне кажется. Если ее бояться, не допускать запретом, то запрещать везде. Мне кажется что проблемы там родятся куда глубже.
У оракли, даже читать нельзя модифицирующуюся таблицу. Мне кажется это связано с версионностью. Оракля затрудняется выбрать временную метку для запроса к таблице, в то время, когда еще не доработал до конца в текущей сессии модифицирующий dml. Это сообщение отредактировал(а) Zloxa - 13.12.2010, 17:51 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Она может не соответствовать логике разработчика - и как результат неверные данные (в лучшем случае)... кто-то, помнится, рассказывал ужастик, как безобидный запрос привёл к полному выносу таблицы боевой базы - из-за неучтённых зависимостей... Несомненно. Но обрати внимание - согласно той же документации, допускается изменение таблицы, если выборка делается не из неё, а из вьюва на ней - пусть даже и неограниченного. Это убирает динамику - и, следовательно, рекурсию, потому что выполняется на выбранной копии данных. И это не просто констатация - это рекомендация. Т.е. разработчики осознанно говорят - это возможно, но при чётком понимании того, что делается. Ну а последствия бездумного применения - возлагаются на пользователя. Типа "тебя предупредили, что не всё так просто, а коли не хочешь думать, то быть по сему..." -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |