无法更改存储过程中的OUT变量

时间:2018-02-02 18:25:26

标签: mysql stored-procedures case

我尝试在存储过程中更改OUT变量。在调用过程之前,我将my_variable设置为9.我没有错误,但在CALL语句变量为NULL

    CREATE PROCEDURE getAllMen(OUT my_variable int)

BEGIN
    CASE my_variable 
    WHEN my_variable <= 10 THEN SELECT 44 INTO my_variable;
    WHEN my_variable > 10 THEN SELECT 55 INTO my_variable;
    ELSE BEGIN END; 
END CASE;
END


SET @start_id = 9;

SELECT @start_id;

CALL getAllMen(@start_id);

感谢。

1 个答案:

答案 0 :(得分:1)

尝试:

DROP PROCEDURE IF EXISTS `getAllMen`;

CREATE PROCEDURE `getAllMen`(
  /*OUT `my_variable` INT*/
  INOUT `my_variable` INT
)
BEGIN
  CASE/* `my_variable` */
    WHEN `my_variable` <= 10 THEN
      SELECT 44 INTO `my_variable`;
    WHEN `my_variable` > 10 THEN
      SELECT 55 INTO `my_variable`;
  END CASE;
END;

SET @`start_id` := 9;

SELECT @`start_id`;

CALL `getAllMen`(@`start_id`);

SELECT @`start_id`;

请参阅db-fiddle

<强>更新

参见文档:

  

13.1.16 CREATE PROCEDURE and CREATE FUNCTION Syntax

     

...

     

OUT参数将过程中的值传递回   呼叫者。它在程序中的初始值为NULL   当过程返回时,调用者可以看到值。

     

...