2011-05-11 81 views
1
DELIMITER $$ 

DROP PROCEDURE IF EXISTS `pawn`.`simpleproc`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `pawn`.`simpleproc`(OUT param1 int, inout incr int) 
BEGIN 
declare incr Integer; 
    set incr= incr+1; 
    SELECT count(*) into param1 FROM pawnamount; 
END $$ 

这是我的代码来创建一个存储过程....它创造了.. 对于执行..存储过程在MySQL不工作

call simpleproc(@param1,@incr); 
select @param1,@incr 

,结果将是空值。它是简单的一个。我已经试过很多times.But,我得到空值仅..

回答

1
 
DECLARE incr INT;       -- incr is NULL here, add DEFAULT 0 if you want it to have a value 
SET incr = incr + 1       -- NULL + 1 is still NULL 
SELECT COUNT(*) INTO param1 FROM pawnamount; -- If the table pawnamount is empty, it generates an empty set, which in a parameter assignment becomes NULL. 
+0

COUNT(*)不会返回NULL。如果表格为空,它将返回0。 – 2011-05-11 14:58:39

1

自定义incrINOUT paramater,你不应该再在你的程序的身体声明它。这样,只要在传递到过程之前进行初始化,就可以正确地增加它。

下面的代码:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `pawn`.`simpleproc`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `pawn`.`simpleproc`(OUT param1 int, inout incr int) 
BEGIN 
    set incr= incr+1; 
    SELECT count(*) into param1 FROM pawnamount; 
END $$ 

DELIMITER ; 

set @incr = 0; 
call simpleproc(@param1,@incr); 
select @param1,@incr;