You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过命令行向含存储过程的SQL脚本传参报错,求解决方案

解决命令行向MySQL存储过程脚本传递参数的1193错误

问题场景

通过命令行向包含存储过程的SQL脚本传递参数,执行命令如下:

mysql -sN -h db.com -u myUser -p -D myDb -e "set @v_db_name='myDb'; \. script.sql"

对应的初始script.sql代码:

DELIMITER //

DROP PROCEDURE IF EXISTS myDB.proc//

CREATE PROCEDURE myDB.proc(IN @v_db_name VARCHAR(30))
BEGIN
    SELECT concat('Debug v_db_name : ', @v_db_name);
END //

delimiter ;

CALL myDB.proc();

执行后触发错误:

ERROR 1193 (HY000) at line 1: Unknown system variable 'v_db_name'

错误原因

MySQL中存储过程的参数定义不能使用@前缀:@开头的是用户会话变量,而存储过程的参数属于局部变量,无需加@标识。初始代码在存储过程参数前添加@,导致MySQL将其误判为系统变量,从而抛出"未知系统变量"的错误。同时调用存储过程时未传入参数,也无法正确传递会话变量的值。

修正方案

调整存储过程的参数定义(移除参数名前的@),并在调用时传入会话变量@v_db_name。修正后的script.sql代码如下:

DELIMITER //

DROP PROCEDURE IF EXISTS myDB.proc//

CREATE PROCEDURE myDB.proc(IN v_db_name VARCHAR(30))
BEGIN
    SELECT concat('Debug v_db_name : ', v_db_name);
END //

delimiter ;

CALL myDB.proc(@v_db_name);

执行命令保持不变,即可正常传递参数并执行存储过程。

内容的提问来源于stack exchange,提问作者Theo Sweeny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:53:24