首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不正确的过程参数数

问不正确的过程参数数
EN

Stack Overflow用户
提问于 2015-06-18 06:51:36
回答 3查看 9.6K关注 0票数 1

定义程序:

代码语言:javascript
复制
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 ; 

呼叫程序:

代码语言:javascript
复制
CALL SP_Reporting();

错误:

错误1318 (42000):过程cds.SP_Reporting的参数数不正确;期望1,得到0

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

EN

回答 3

Stack Overflow用户

发布于 2015-06-18 07:09:30

在创建存储过程时,可以为输入分配一个值,因此在调用proc时不需要传递参数。

我们通常给NULL赋值,对于参数的可选,我们使用这种方法。

代码语言:javascript
复制
tablename VARCHAR(20) = NULL

你的完整剧本:

代码语言:javascript
复制
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语句检查它。

代码语言:javascript
复制
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 ;
票数 3
EN

Stack Overflow用户

发布于 2015-06-18 07:02:15

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

呼叫SP_Reporting(table_name);

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

票数 2
EN

Stack Overflow用户

发布于 2015-06-18 07:02:36

您忽略了参数:tablename,您应该喜欢这样:调用SP_Reporting('any‘)

或调用SP_Reporting(null)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30908365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档