在存储过程中声明变量时出现错误结果

Wrong result while declaring a variable inside Stored procedure

以下是一个简单的存储过程,用于根据 table 计算男性数量,我在存储结果的过程中声明了一个变量 total_count 。

 DELIMITER //

 CREATE PROCEDURE GetMaleCount()
      BEGIN
 DECLARE total_count INT DEFAULT 0 ;
 SELECT COUNT(STUDENT_ID) INTO total_count
 FROM [table1]
 where STUDENT_GENDER = 'M' ;

     END //
 DELIMITER ;

   call GetMaleCount();
   select @total_count as tc;

当我执行此过程时,我得到 NULL 作为答案,但是当我单独执行内部 sql 查询时,我得到正确答案 1852。我是否以错误的方式声明了变量?

您声明的

total_count 仅在过程中可见。这就是为什么它在 NULL 之外。定义过程时需要使用OUT参数:

DELIMITER //

CREATE PROCEDURE GetMaleCount(OUT total_count INT)
    BEGIN
        SELECT COUNT(STUDENT_ID) INTO total_count
        FROM [table1]
        where STUDENT_GENDER = 'M' ;
    END //
DELIMITER ;

call GetMaleCount(@total_count);
select @total_count as tc;

您需要使用 OUT 参数。

DELIMITER //  
 CREATE PROCEDURE GetMaleCount(OUT total_count INT)
 BEGIN
   SELECT COUNT(STUDENT_ID) INTO total_count
   FROM [table1]
   where STUDENT_GENDER = 'M' ;
 END //
DELIMITER ;

 call GetMaleCount(@total_count);
 select @total_count as tc;