为什么我的存储过程没有将值设置为变量?

时间:2016-02-26 06:08:07

标签: mysql select stored-procedures

我已经改变了我用MySQL制作的存储过程,我已经声明了两个新变量,然后从select命令设置了一个值,但是它没有从select命令中获取任何值,我尝试运行相同的select存储过程之外的声明,它在那里工作正常。为什么select命令在存储过程中不能正常工作?

这是sp的一部分无法正常工作:

DECLARE reorden INT;
DECLARE minimo INT;
...
...
IF (existenciasresta>=0) THEN
SELECT REORDEN FROM productos WHERE ID_PRODUCTO =id INTO reorden;
SELECT MINIMO FROM productos WHERE ID_PRODUCTO = id INTO minimo;
IF (existenciasresta<reorden) THEN
    SELECT 'El producto está en su punto de reorden';
ELSEIF (existenciasresta<minimo) THEN
    SELECT 'El producto está en su punto mínimo';
END IF;
SET retorno = 1;

运行sp后,变量reorden和minimo被设置为null,当我在查询选项卡中运行此语句时,我得到了正确的值:

 SELECT REORDEN FROM productos WHERE ID_PRODUCTO = '1233333333333';

正确传递if条件,因为它正确地将retorno设置为1,所以我真的不知道为什么这样做,任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

您还可以在列名称后面写INTO个关键字,将哪个列值放入varible 尝试此查询而不是select query

SELECT REORDEN INTO reorden FROM productos WHERE ID_PRODUCTO =id ;
SELECT MINIMO INTO minimo FROM productos WHERE ID_PRODUCTO = id ;

OR

SET reorden = (SELECT REORDEN FROM productos WHERE ID_PRODUCTO =id);
SET minimo = (SELECT MINIMO FROM productos WHERE ID_PRODUCTO = id) ;

这两个都是您希望可以使用的正确查询。

答案 1 :(得分:0)

我发现了类似的奇怪行为。鉴于以下程序。

| HBR VM     | RPO Violated| RPO Violations |
|:-----------|------------:|:--------------:|
| VM 1       | VM 6        | VM 2
| VM 2       |             | VM 6    
| VM 3       |             |     
| VM 4       |             |     
| VM 5       |             |     
| VM 6       |             | 

我发现我必须将其更改为以下内容才能按预期工作。

CREATE PROCEDURE delete_product_family(IN name VARCHAR(10))
BEGIN
    DECLARE name1 VARCHAR(10);
    SET name1 = name;
    DELETE FROM product_family WHERE name = name1;
END