【问题标题】:SQL - Create trigger after insertSQL - 插入后创建触发器
【发布时间】:2018-12-13 08:07:28
【问题描述】:

我有这四个存储菜单和成分的表,如果在customer_order 中添加一行,则应该根据来自menu_inventoryquantity 乘以来自@ 的 order_quantity 自动扣除来自raw_materialsraw_material_quantity 987654326@.

表格菜单

+-----------+-----------+
| menu_code | menu_name |
+-----------+-----------+
|  prod-001 | Ice cream |
+-----------+-----------+

餐桌原材料

+-------------------+-------------------+-----------------------+
| raw_material_code | raw_material_name | raw_material_quantity |
+-------------------+-------------------+-----------------------+
|     item-001      |       sugar       |          10           |
+-------------------+-------------------+-----------------------+
|     item-002      |       cream       |          20           |
+-------------------+-------------------+-----------------------+

表格 menu_inventory

+-----------------------+-------------------+-----------+----------+
| raw_ingredients_number| raw_material_code | menu_code | quantity |
+-----------------------+-------------------+-----------+----------+
|           1           |     item-001      | prod-001  |    5     |
+-----------------------+-------------------+-----------+----------+
|           2           |     item-002      | prod-001  |    10    |
+-----------------------+-------------------+-----------+----------+

表 customer_order

+-------------------+--------------+-----------+----------------+
| customer_order_no |  customer_no | menu_name | order_quantity |
+-------------------+--------------+-----------+----------------+
|         1         | customer-001 | Ice Cream |        2       |
+-------------------+------------- +-----------+----------------+

所以我想在插入后为表customer_order 创建一个触发器。 我已经创建了一个,但它没有提供准确的结果。任何答案都会有很大帮助,谢谢。

编辑

    CREATE DEFINER=`root`@`localhost` TRIGGER `customer_order_AFTER_INSERT` AFTER INSERT ON `customer_order` FOR EACH ROW BEGIN
        declare x int;
        declare y int;
        declare quantity_1 int;
        declare quantity_2 int;
        declare sums int;

         if (select count(raw_material_code) from menu_inventory where  menu_code = new.menu_code > 0)
 then           
            set y = new.order_quantity;

            DROP TEMPORARY TABLE IF EXISTS `temptable`;
            CREATE TEMPORARY TABLE temptable (select row_number() over() as raw_ingredients_number,quantity,raw_material_code  from menu_inventory  where menu_code = new.menu_code);        
            while y > 0 do
            set x = (select count(raw_material_code ) from menu_inventory where menu_code = new.menu_code);
                while x > 0 do

                    set @mcode = (select menu_code from temptable where menu_ingredients_number = x);
                    set @rcode = (select raw_material_code from raw_material where raw_material_name  = @mcode);
                    set quantity_1 = (select raw_material_quantity  from raw_material where raw_material_name  = @mcode);
                    set quantity_2 = (select quantity from temptable where menu_ingredients_number = x);
                    set sums = quantity_1-quantity_2;

                    update raw_material set raw_material_quantity  = sums where raw_material_code  = @rcode;
                    set x=x-1;
                end while;

                set y=y-1;
            end while;

         end if;
    END 

【问题讨论】:

  • “我已经创建了一个,但它没有提供准确的结果”——这并不意味着我们不会从您向我们展示您的尝试中受益。
  • 好的先生,我会编辑
  • 您使用的是哪个 dbms? (许多触发器实现是特定于产品的。)
  • @jarlh mysql 8.0
  • 请分享您实现的触发器

标签: mysql sql database-trigger


【解决方案1】:

更简洁的方法是在触发器中使用多表更新

drop trigger if exists  `customer_order`;
delimiter $$
CREATE  TRIGGER `customer_order_AFTER_INSERT` AFTER INSERT ON `customer_order` 
 FOR EACH ROW 
 BEGIN
    update raw_materials r
        join menu m on m.menu_name = new.menu_name
        join menu_inventory mi on mi.menu_code = m.menu_code
            set r.raw_material_quantity = r.raw_material_quantity - (new.Order_quantity * mi.quantity)
        where r.raw_material_code = mi.raw_material_code;

 end $$

 delimiter ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多