SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.09.2011 07:32:39

Receptor
Участник
Зарегистрирован: 19.08.2011
Сообщений: 6

Триггер. Ошибка #1442

Хотелось вызвать триггер BEFOR INSERT и изменить значение определенного поля в вызваной процедуре внутри триггера.
Т.е. есть триггер BEFOR INSERT, в нем вызывается процедура. В процедуре же, в зависимости от введенных данных новой строки должна измениться определенная строка в тоже таблице, к которой подвязан сам триггер. Ошибка говорит о том, что такое не возможно. Но все-таки неужели нельзя такое обойти? Ведь, как я понял, такая ошибка должна спасать от рекурсии, но при триггере на вставку и последующем обновлении какой-то строки рекурсии быть не может. Смысл тогда блокировать всю таблицу? Подскажите существует ли выход?

Для примера приведу укороченые коды триггера и процедуры.

триггер:


CREATE
    DEFINER = 'maksim'@'1.1.1.1'
TRIGGER database.insert_offer_premium
    BEFORE INSERT
    ON database.jos_adv_offer
    FOR EACH ROW
BEGIN
  CALL update_premium_for_count(0, 5, 0, 0);
END
 


процедура:

CREATE DEFINER = 'maksim'@'1.1.1.1'
PROCEDURE database.update_premium_for_count(IN t_name VARCHAR(255), IN city_id TINYINT, IN re_type TINYINT, IN input_value TINYINT)
BEGIN
  IF city_id = 5 THEN
    UPDATE jos_adv_offer
    SET
      ispremium = 2
    WHERE
      id = 50098;
 END IF;
END
 

Отредактированно Receptor (05.09.2011 12:59:12)

Неактивен

 

#2 05.09.2011 12:52:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Триггер. Ошибка #1442

Нет, обойти это нельзя, т.к. рекурсия все равно возможно (например, триггер BEFORE UPDATE,
который вставляет строки).

Неактивен

 

#3 05.09.2011 12:56:25

Receptor
Участник
Зарегистрирован: 19.08.2011
Сообщений: 6

Re: Триггер. Ошибка #1442

В этом случае я согласен, но в моем то такое невозможно. По идее нужно это учесть. Т.е. мне либо делать все это на событиях, процедурах, либо вообще не в mysql, так получаеся?

Неактивен

 

#4 05.09.2011 13:12:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Триггер. Ошибка #1442

Именно так. Изменять ту же таблицу из триггера нельзя.

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson