簡體   English   中英

MySQL存儲過程的返回值

[英]MySQL stored procedure 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

您已正確完成存儲過程但我認為您沒有正確引用valido變量。 我正在看一些例子,他們在參數之前放了一個@符號,如@Valido

這句話SELECT valido; 應該像這樣的SELECT @valido;

看看這個鏈接mysql stored-procedure:out參數 請注意7個upvotes的解決方案。 他用@符號引用了參數,因此我建議你在參數valido之前添加一個@符號

我希望這對你有用。 如果它確實投票並將其標記為答案。 如果沒有,請告訴我。

加:

  • 在SP的開頭和結尾都有DELIMITER
  • DROP PROCEDURE IF EXISTS 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;

使用帶有get診斷的 declare處理程序更新您的SP並處理其中的異常,以便您知道是否存在異常。 例如

CREATE DEFINER=`root`@`localhost` PROCEDURE `validar_egreso`(
IN codigo_producto VARCHAR(100),
IN cantidad INT,
OUT valido INT(11)
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
    GET DIAGNOSTICS CONDITION 1
    @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
    SELECT @p1, @p2;
END
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM