PROCEDURE的参数数量不正确

时间:2015-06-18 06:51:36

标签: mysql sql

定义程序:

DELIMITER $$
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
proc_label:BEGIN
     IF tablename IS NULL THEN
            SELECT 'Null detect';
          LEAVE proc_label;
     END IF;

     SELECT 'after';
END;
$$
DELIMITER ; 

通话程序:

CALL SP_Reporting();

错误:

  

ERROR 1318(42000):PROCEDURE的参数数量不正确   cds.SP_Reporting;预期1,得到0

默认情况下如何传递var,如SP_Reporting(IN tablename = 'default value' VARCHAR(20))

3 个答案:

答案 0 :(得分:3)

在创建存储过程时,可以为输入赋值,因此在调用proc时无需传递参数。

我们通常指定NULL并且为了使参数可选,我们使用此方法。

tablename VARCHAR(20) = NULL

完整的脚本:

DELIMITER $$
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20) = NULL)
proc_label:BEGIN
     IF tablename IS NULL THEN
            SELECT 'Null detect';
          LEAVE proc_label;
     END IF;

     SELECT 'after';
END;
$$
DELIMITER ;

修改

MySQL不接受可选参数。因此,一种方法是在存储过程中传递NULL值,并在proc中使用IF语句进行检查。

DELIMITER $$
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
proc_label:BEGIN
     IF tablename IS NULL THEN
            -- Do something;
     ELSE
            -- Do something else;
     END IF;
END;
$$
DELIMITER ;

答案 1 :(得分:2)

您必须在过程调用语句中传递表名,如:

CALL SP_Reporting(table_name);

您无法在call语句中传递默认值。 您可以在调用过程之前指定默认值。 或使用OUT而不是IN作为参数。

答案 2 :(得分:0)

你错过了参数:tablename 你应该这样: 调用SP_Reporting('any varchar')
要么 调用SP_Reporting(null)