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

时间:2017-03-24 09:19:21

标签: mysql sql stored-procedures triggers stored-functions

以下是一个从表中计算男性计数的简单存储过程,我在proc中声明了一个变量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.我是否以错误的方式声明了变量?

2 个答案:

答案 0 :(得分:0)

您宣布的

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;

答案 1 :(得分:0)

您需要使用OUT参数。

angular.module('app')
 .config(['$logProvider','$provide',
    function($logProvider,$provide) {

        if(isProduction){ //flag to check production here
         $logProvider.debugEnabled(false);
         $provide.decorator('$log', ['$delegate', function($delegate) {
            $delegate.warn = angular.noop;
            return $delegate;
         }]);
       }

    }
])