通过命令行向含存储过程的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
相关产品推荐
相关产品推荐

