Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при выполнении триггера! 
:(
    Опции темы
Carolina1212
Дата 13.12.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.12.2010

Репутация: нет
Всего: нет



Передо мной такая задача:
Cоздать триггер, который устанавливает в поле stud.telephone значение NULL при удалении номера.
Код триггера:
Код

CREATE TRIGGER `stud_after_upd_tr` AFTER UPDATE ON `stud`
  FOR EACH ROW
BEGIN
  UPDATE stud
  SET stud.telephone = NULL
  WHERE stud.telephone=' ';
END;

Он скомпилировался, но когда я создаю условия для его выполнения (удаляю номер в поле stud.telephone), выдает ошибку:
user posted image
Подскажите пожалуйста, что не так и как исправить?!
PM MAIL   Вверх
Akina
Дата 13.12.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Правильно. Нельзя в триггере вносить изменения в таблицу, на которую повешен триггер (причём по совершенно очевидным причинам). Это описано в документации. И там же описано, как это ограничение "объехать". Уж не поленитесь почитать, а?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 13.12.2010, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  13.12.2010,  16:08 Найти цитируемый пост)
причём по совершенно очевидным причинам

А для меня вот, эти ограничения, если честно, совсем не очевидны. Лишь с натяжкой и весьма не уверенно, путанно могу попытаться обосновать для оракли, но не для маськи  smile . 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 13.12.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Триггер выполняет обновление, обновление запускает триггер, триггер выполняет обновление... вечный кайф, одним словом...
Представь, что триггер ТС заработает... и выполняется запрос
Код

UPDATE stud
SET stud.telephone = ' '
WHERE stud.telephone Is Null;


Это сообщение отредактировал(а) Akina - 13.12.2010, 17:36


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 13.12.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Akina, однакож в  триггерной логике можно реализовать и условия выхода из рекурсии. Недопущение рекусрсии это какойто слабый аргумент, мне кажется. Если ее бояться, не допускать запретом, то запрещать везде. Мне кажется что проблемы там родятся куда глубже.

У оракли, даже читать нельзя модифицирующуюся таблицу. Мне кажется это связано с версионностью. Оракля затрудняется выбрать временную метку для запроса к таблице, в то время, когда еще не доработал до конца в текущей сессии модифицирующий dml.

Это сообщение отредактировал(а) Zloxa - 13.12.2010, 17:51


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 13.12.2010, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  13.12.2010,  18:41 Найти цитируемый пост)
в  триггерной логике можно реализовать и условия выхода из рекурсии

Она может не соответствовать логике разработчика - и как результат неверные данные (в лучшем случае)... кто-то, помнится, рассказывал ужастик, как безобидный запрос привёл к полному выносу таблицы боевой базы - из-за неучтённых зависимостей...

Цитата(Zloxa @  13.12.2010,  18:41 Найти цитируемый пост)
Мне кажется что проблемы там родятся куда глубже.

Несомненно.

Но обрати внимание - согласно той же документации, допускается изменение таблицы, если выборка делается не из неё, а из вьюва на ней - пусть даже и неограниченного. Это убирает динамику - и, следовательно, рекурсию, потому что выполняется на выбранной копии данных. И это не просто констатация - это рекомендация. Т.е. разработчики осознанно говорят - это возможно, но при чётком понимании того, что делается. Ну а последствия бездумного применения - возлагаются на пользователя. Типа "тебя предупредили, что не всё так просто, а коли не хочешь думать, то быть по сему..."


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.