没有参数的MySQL存储过程无法识别数据类型

问题描述

您能帮忙吗?

此代码应将包装中的产品数量更新为等于构成包装的最小产品库存。我的库存每5分钟根据Oracle ERP数据更新一次,但是ERP不知道中止包装-它们仅存在于Prestashop中,并且必须按周期独立地更新(作业)。我尝试按程序进行。

CREATE OR REPLACE PROCEDURE B2C_P_QUANTYTY_UPDATE 
BEGIN
 FOR i IN 
  (SELECT ps_pack.id_product_pack,min(ps_stock_available.quantity) min_quantity
     FROM ps_pack,ps_stock_available
    WHERE ps_pack.id_product_item = ps_stock_available.id_product
    GROUP BY ps_pack.id_product_pack)
 LOOP
  UPDATE ps_stock_available 
     SET ps_stock_available.quantity = i.min_quantity 
   WHERE ps_stock_available.id_product = i.id_product_pack ; 
 END LOOP ; 
END;
在分析中发现

2个错误。

Unrecognized data type. (near "ps_pack" at position 81)
Unrecognized data type. (near "(" at position 109)

MySQL返回:

#1064 - Something is wrong in your syntax near 'BEGIN
FOR i IN
  (SELECT ps_pack.id_product_pack,min(ps_stock_available.qua' in line 2

我不明白为什么,选择查询可以正常工作。但是包裹在过程中的程序将停止识别数据类型。

解决方法

感谢@Barranka的回复,我发布了SQL - Looping through ever row of table in mysql?

代码如下:

DELIMITER $$
CREATE OR REPLACE PROCEDURE B2C_P_QUANTYTY_UPDATE ()
BEGIN
    DECLARE c_product int;
    DECLARE c_min_quantity int;
    DECLARE done int default false;
    DECLARE quantity_cursor cursor FOR SELECT ps_pack.id_product_pack AS product,MIN(ps_stock_available.quantity) min_quantity 
                                         FROM ps_pack,ps_stock_available 
                                        WHERE ps_pack.id_product_item = ps_stock_available.id_product
                                        GROUP BY ps_pack.id_product_pack;
    DECLARE continue handler FOR not found  
        SET done = true;            
OPEN quantity_cursor;
    quantity_loop: LOOP
        FETCH quantity_cursor INTO c_product,c_min_quantity;
            IF done THEN 
                leave quantity_loop;
            END IF;
        UPDATE ps_stock_available 
           SET ps_stock_available.quantity = c_min_quantity 
         WHERE ps_stock_available.id_product = c_product; 
    END loop ; 
CLOSE  quantity_cursor;
COMMIT;
END$$
DELIMITER ;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...