MySQL存储过程的返回值

Jua*_*nma 19 mysql stored-procedures return-value

我必须创建一个SP,如果它有效,则返回一个值.但它不返回任何东西,我不知道,为什么?

CREATE DEFINER=`root`@`localhost` PROCEDURE `validar_egreso`(
    IN codigo_producto VARCHAR(100),
    IN cantidad INT,
    OUT valido INT(11)
)
BEGIN
    DECLARE resta INT(11);
    SET resta = 0;

    SELECT (s.stock - cantidad) INTO resta
    FROM stock AS s
    WHERE codigo_producto = s.codigo;

    IF (resta > s.stock_minimo) THEN
        SET valido = 1;
    ELSE
        SET valido = -1;
    END IF;
    SELECT valido;
END
Run Code Online (Sandbox Code Playgroud)

mfr*_*edy 22

您已正确完成存储过程,但我认为您没有valido正确引用该变量.我正在看一些例子,他们在参数之前放了一个@符号@Valido

这句话SELECT valido;应该是这样的SELECT @valido;

看看这个链接mysql stored-procedure:out参数.请注意7个upvotes的解决方案.他用@符号引用了参数,因此我建议你在参数valido之前添加一个@符号

我希望这对你有用.如果它确实投票并将其标记为答案.如果没有,请告诉我.

  • 将 @ 放在变量前面使其成为特定于会话的用户定义变量,效果很好。您还可以将变量声明为“DECLARE valido INT”。 (2认同)

bin*_*iam 7

加:

  • DELIMITER 在SP的开头和结尾.
  • 如果存在,则删除程序validar_egreso; 在开始
  • 在呼叫SP时,请使用@variableName.

这适合我.(我修改了脚本的某些部分,因此任何人都可以在没有表的情况下运行它).

DROP PROCEDURE IF EXISTS `validar_egreso`;

DELIMITER $$

CREATE DEFINER='root'@'localhost' PROCEDURE `validar_egreso` (
    IN codigo_producto VARCHAR(100),
    IN cantidad INT,
    OUT valido INT(11)
)
BEGIN

    DECLARE resta INT;
    SET resta = 0;

    SELECT (codigo_producto - cantidad) INTO resta;

    IF(resta > 1) THEN
       SET valido = 1;
    ELSE
       SET valido = -1;
    END IF;

    SELECT valido;
END $$

DELIMITER ;

-- execute the stored procedure
CALL validar_egreso(4, 1, @val);

-- display the result
select @val;
Run Code Online (Sandbox Code Playgroud)