定义程序:
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))
答案 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)