Error Code: 1318. Incorrect number of arguments for PROCEDURE company.new_procedure; expected 2, got

解决MySQL存储过程调用参数数量错误问题
本文讨论了在MySQL中遇到的存储过程调用参数数量不匹配导致的错误,具体为调用存储过程时传入参数数量与定义不符的情况。提供了详细的问题原因分析及解决方法,通过示例展示了正确的参数传递方式。同时强调了存储过程在数据库编程中的重要性和正确使用方法。

1、错误叙述性说明

20:27:34	call new_procedure(20150112)	Error Code: 1318. Incorrect number of arguments for PROCEDURE company.new_procedure; expected 2, got 1	0.000 sec

1 queries executed, 0 success, 1 errors, 0 warnings

查询:call query_student()

错误代码: 1318
Incorrect number of arguments for PROCEDURE test.query_student; expected 1, got 0

运行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec

2、错误原因

CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(in `departId` int,out `num` int)
BEGIN

  select count(t.depart_name) into num from t_department_info t where t.depart_id = departId;
  

END

call new_procedure(20150112);

   在调用存储过程中,须要传入两个參数,可是仅仅传了一个參数


3、解决的方法

call new_procedure(20150112,@num);

版权声明:本文博主原创文章。博客,未经同意不得转载。

<think>好的,我现在需要帮助用户解决MySQL的两个错误:1318和1064。首先,我得理清楚每个错误的原因和可能的解决方法。首先看错误1318,提示存储过程sp_DealCIM_0_1021800的参数数量不对,预期是11个,但实际传了10个。这说明调用存储过程的时候少传了一个参数。用户可能在调用时漏掉了某个参数,或者存储过程本身被修改过导致参数数量变化,而调用代码没有更新。这时候需要检查存储过程的定义,确认参数数量,然后核对调用时的参数是否正确。可能还需要检查是否有默认参数,或者参数顺序是否正确。 然后是错误1064,语法错误在'null'附近。这个错误通常是因为SQL语句中存在语法问题,比如引号使用错误、保留字未转义,或者NULL关键字使用不当。用户提到错误位置在'null'附近,可能是在插入或更新语句中将NULL写成了字符串'null',或者某个地方缺少逗号、括号不匹配等。需要检查具体的SQL语句结构,尤其是参数列表是否正确,NULL是否被正确使用,没有多余的引号,或者字段名是否为保留字需要反引号包裹。接下来,结合用户提供的引用内容,引用[1]提到BIGINT溢出错误,但用户当前的问题不涉及这个,可能可以忽略。引用[2]是关于GTID的错误,也和当前问题无关。引用[3]是JavaScript代码示例,和MySQL无关。所以这些引用可能不是直接相关的,但用户可能之前的问题涉及过这些内容,需要确认是否有其他潜在联系。用户之前的问题是关于错误1064的,现在同时遇到1318和1064,需要分别处理。可能需要分步骤解决,先解决参数数量错误,再处理语法错误。另外,用户可能是在调用存储过程时传参错误,同时存储过程内部的SQL语句存在语法问题,导致两个错误同时出现。 接下来,我需要构建解决方案,逐步引导用户检查存储过程的定义和调用,以及检查涉及NULL的SQL语句部分。需要确保用户明确如何核对参数数量,如何正确使用NULL,以及如何检查语法结构。可能需要建议用户使用SHOWCREATE PROCEDURE来查看存储过程的参数,并检查调用语句的参数数量。对于语法错误,建议用户逐行检查SQL语句,特别是参数列表中的逗号、括号,以及NULL的正确写法。 可能还需要考虑存储过程中是否有动态SQL,导致错误被掩盖,或者参数传递时类型不匹配。此外,用户可能在拼接SQL字符串时出错,导致生成的SQL语句存在语法问题,比如漏掉了逗号或引号,或者在应该使用变量名的地方误用了字符串。 最后,生成相关问题,需要围绕存储过程参数、SQL语法错误、NULL的使用,以及如何调试MySQL错误等方面展开。确保用户能够通过相关问题进一步理解和解决类似问题。</think>### 解决MySQL错误1318和1064的逐步方案 以下针对两个错误分别提供解决方案: --- #### **一、错误1318:参数数量不匹配** **报错信息**: `Incorrect number of arguments for FUNCTION sp_DealCIM_0_1021800; expected 11, got 10` ##### **解决步骤** 1. **验证存储过程定义** 使用以下命令查看存储过程参数列表: ```sql SHOW CREATE PROCEDURE sp_DealCIM_0_1021800; ``` 确认预期的参数数量是否为11个[^1]。 2. **检查调用语句** 核对调用存储过程的代码,确保传入的参数数量与定义一致。例如: ```sql -- 正确调用(假设存储过程需要11个参数) CALL sp_DealCIM_0_1021800(param1, param2, ..., param11); ``` 若参数包含表达式或函数返回值,需确保所有参数完整传递。 3. **处理默认参数(若有)** 若存储过程的某些参数允许默认值,需在定义时明确标注: ```sql CREATE PROCEDURE sp_DealCIM_0_1021800( param1 INT, param2 VARCHAR(255) DEFAULT 'default_value' ) ``` 调用时可省略带默认值的参数[^1]。 --- #### **二、错误1064:语法错误** **报错信息**: `SQL syntax error near 'null'` ##### **解决步骤** 1. **检查NULL的用法** - 确保`NULL`未被包裹在引号中: ```sql -- 错误写法 INSERT INTO table (col1, col2) VALUES ('value1', 'null'); -- 正确写法 INSERT INTO table (col1, col2) VALUES ('value1', NULL); ``` - 若字段不允许为空,插入`NULL`会触发错误[^1]。 2. **验证参数列表结构** 检查SQL语句中逗号和括号是否匹配: ```sql -- 错误:缺少逗号或括号不闭合 INSERT INTO table (a, b c) VALUES (1, NULL); -- 正确写法 INSERT INTO table (a, b, c) VALUES (1, NULL, 3); ``` 3. **处理保留字冲突** 若字段名或表名与保留字冲突(如`order`),需用反引号包裹: ```sql -- 正确写法 CREATE TABLE `order` (id INT, `desc` VARCHAR(255) NULL); ``` --- #### **三、联合调试建议** 若错误同时出现在存储过程内部: 1. **检查存储过程的SQL逻辑** - 使用`DECLARE CONTINUE HANDLER FOR SQLEXCEPTION`捕获内部错误。 - 逐段注释代码,定位具体报位置。 2. **参数传递验证** 确保传入参数的数据类型与存储过程定义匹配,例如: ```sql -- 假设第11个参数应为INT类型 CALL sp_DealCIM_0_1021800(..., 'string_value'); -- 错误(类型不匹配) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值