Это ограничение MySQL в триггере.Внутри триггера не разрешено выдавать оператор DML (INSERT / UPDATE / DELETE) для любой таблицы, на которую ссылается оператор, вызвавший срабатывание триггера.
Похоже, мы хотим установитьстолбец во вставленной строке со значением.
Обычно это лучше обрабатывать в триггере BEFORE INSERT
.Триггеру BEFORE INSERT
разрешено выполнять SELECT
для других таблиц.
SET NEW.B_IdBoleta = expr ;
FOLLOWUP
Не ясно, для чего предназначен этот триггерсделать.Но мы знаем, что он не может выдать UPDATE
для pago
.
Вот пример триггера BEFORE INSERT
, который пытается установить значение столбца b_idboleta
из результата запроса,Мы добавляем обработчик продолжения, чтобы перехватить ошибку, если запрос SELECT не возвращает строку.
DELIMITER //
CREATE TRIGGER tr_pago
BEFORE INSERT ON pago
FOR EACH ROW
BEGIN
DECLARE CONTINUE HANDLER FOR 1329 BEGIN SET NEW.b_idboleta = NULL; END;
SELECT bo.idboleta
INTO NEW.b_idboleta
FROM compromiso_pago cp
JOIN boleta bo
ON bo.ur_idunidadrecaudadora = cp.ur_idunidadrecaudadora
WHERE cp.idcompromisopago = NEW.cp_idcompromisopago
ORDER
BY bo.idboleta
LIMIT 1;
END//
DELIMITER ;