我已经改变了我用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,所以我真的不知道为什么这样做,任何帮助都会非常感激。
答案 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