Mysql 错误代码:在存储函数或触发器中不允许1422显式或隐式提交。在触发器中调用sp时

Mysql 错误代码:在存储函数或触发器中不允许1422显式或隐式提交。在触发器中调用sp时,mysql,stored-procedures,database-trigger,Mysql,Stored Procedures,Database Trigger,我做错了什么 创建一个触发器,每当返回胶片时自动调用payFees过程 您必须决定如何命名触发器、何时触发触发器以及触发触发器的表: DROP TRIGGER trig_pay_fee; DELIMITER // CREATE TRIGGER trig_pay_fee AFTER UPDATE ON rental FOR EACH ROW BEGIN CALL payFees(new.rental_id); END// DELIMITER ; CALL returnFilm(

我做错了什么

创建一个触发器,每当返回胶片时自动调用payFees过程

您必须决定如何命名触发器、何时触发触发器以及触发触发器的表:

DROP TRIGGER trig_pay_fee;

DELIMITER //
CREATE TRIGGER trig_pay_fee AFTER
UPDATE ON rental
FOR EACH ROW
  BEGIN
    CALL payFees(new.rental_id);
  END//
DELIMITER ;

CALL returnFilm(1216);
创建一个存储过程payFees,记录任何逾期付款 归还电影时的费用。如果电影过期,公司每天收取1欧元的费用。 您的过程应该更新付款表中的行 与他们相关,在每天逾期的金额上增加1欧元

USE sakila;
DROP PROCEDURE IF EXISTS payFees;
DELIMITER //

CREATE PROCEDURE payFees(IN r_id INT)
  BEGIN

    IF daysOverdue(r_id) > 100
    THEN ALTER TABLE payment
      MODIFY COLUMN amount DECIMAL(10, 2);
    END IF;

    UPDATE payment
    SET amount = daysOverdue(r_id) * 1
    WHERE rental_id = r_id;

  END//
DELIMITER ;


CALL payFees(126);
SELECT *
FROM payment
WHERE rental_id = 126;