【发布时间】:2018-12-13 08:07:28
【问题描述】:
我有这四个存储菜单和成分的表,如果在customer_order 中添加一行,则应该根据来自menu_inventory 的quantity 乘以来自@ 的 order_quantity 自动扣除来自raw_materials 的raw_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