【问题标题】:Update the same row after insert Inside the trigger在触发器内部插入后更新同一行
【发布时间】:2017-11-04 07:11:55
【问题描述】:

我必须使用一个触发器来更新插入的行。以下是我的触发器。

DELIMITER $$

USE `kikan_db`$$

CREATE TRIGGER `t_trigger` AFTER INSERT ON `t_order` 
FOR EACH ROW BEGIN
Declare kb_rate int;
Declare kb_amount int;

REPLACE INTO t_order_sales_month 
    SET order_no = NEW.order_no,
           search_sales_month = getSalesMonth(NEW.order_no);

SELECT kickback_rate INTO kb_rate from m_customer where customer_code = New.bill_customer_code;     
    SET kb_amount := 9999 / kb_rate;

 UPDATE `t_order`  SET `t_order`.kickback_amount = kb_amount where `t_order`.order_no = NEW.order_no;


END;
$$

DELIMITER ;

更新时出错。

我必须使用AFTER 而不是BEFORE 类型的触发器

【问题讨论】:

  • 您不能操作启动触发器的表,也不能更改新表。后触发器中的值。
  • 有什么解决办法吗?
  • 也许您可以计算插入 t_order 的回扣(贿赂?)。插入是什么样的 - 是在带有值子句的插入处还是带有选择子句的插入处?
  • 插入一个值子句
  • 我只能用触发器来做。客户的要求

标签: mysql sql database triggers


【解决方案1】:

而不是只使用after insert/update触发器,(1)您可以更改before insert/update上的虚拟new行的值:

Declare kb_rate int;
Declare kb_amount int;

SELECT kickback_rate INTO kb_rate from m_customer 
     where customer_code = New.bill_customer_code;     
SET kb_amount := 9999 / kb_rate;


SET new.kickback_amount = kb_amount;

(2)并在after insert/update触发器中执行其他SQL语句:

REPLACE INTO t_order_sales_month 
   SET order_no = NEW.order_no,
   search_sales_month = getSalesMonth(NEW.order_no);

【讨论】:

  • 你可以,除非 op 声明我必须使用 AFTER 而不是 BEFORE 类型的触发器
  • 是的@P.Salmon,但是在插入触发器之后不能修改new 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2016-10-13
  • 1970-01-01
相关资源
最近更新 更多