我正在尝试将以下触发器从PL / SQL转换为MySQL
特别是我想知道如何做到这一点:
1. FOR quantity in 1..:new.product_quantity
2. FOR row IN ()
create or replace trigger "TRG_INSERT_BILL_PRODUCTS"
after insert on Bill_Products
for each row
begin
FOR quantity in 1..:new.product_quantity
LOOP
FOR row IN (
SELECT pa.article_id,pa.consist_quantity
FROM product_articles pa
WHERE pa.product_id=:new.product_id)
LOOP
update store
set store_quantity=store_quantity-row.consist_quantity
where article_id=row.article_id;
END LOOP;
END LOOP;
END;
触发器的说明: 商店表具有该文章的store.article_id和store.store_quantity Product_articles表包含pa.product_id,pa.article_id(产品中一致的文章),pa.consist_quantity(文章)
所以在账单中插入产品之后,我想找到他所有的组成文章并降低store.article_id的store.store_quantity,这将是product_quantity(在账单中添加了多少产品)* composed_quantity(该产品中的那篇文章)
答案 0 :(得分:2)
FOR 1中的数量:new.product_quantity
MySql没有FOR循环。
您可以使用WHILE循环模拟它:
Set quantity = 1
WHILE quantity <= :new.product_quantity DO
.....
statement_list
.....
Set quantity = quantity + 1
END WHILE
FOR行IN(查询)LOOP ...
MySql不支持这种循环,你必须声明一个游标并处理它:
DECLARE cursor_name CURSOR FOR
SELECT pa.article_id,pa.consist_quantity
FROM product_articles pa
WHERE pa.product_id=:new.product_id;
还为此游标声明一个continue处理程序,然后明确地打开游标,在循环中从中获取行并关闭它。
请参阅文档:http://dev.mysql.com/doc/refman/5.6/en/cursors.html
找到如何使用MySql游标和示例。