定义程序:
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();错误:
错误1318 (42000):过程cds.SP_Reporting的参数数不正确;期望1,得到0
默认情况下如何像SP_Reporting(IN tablename = 'default value' VARCHAR(20))那样传递var
发布于 2015-06-18 07:09:30
在创建存储过程时,可以为输入分配一个值,因此在调用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 ;发布于 2015-06-18 07:02:15
必须在过程调用语句中传递表名,如下所示:
呼叫SP_Reporting(table_name);
无法在call语句中传递默认值。可以在调用过程之前指定默认值。或者使用OUT代替IN作为参数。
发布于 2015-06-18 07:02:36
您忽略了参数:tablename,您应该喜欢这样:调用SP_Reporting('any‘)
或调用SP_Reporting(null)
https://stackoverflow.com/questions/30908365
复制相似问题