PL / SQL语法到MySQL语法

时间:2014-02-20 00:49:50

标签: mysql oracle plsql

我正在尝试将以下触发器从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(该产品中的那篇文章)

1 个答案:

答案 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游标和示例。