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

MySQL存储过程传入会话变量时触发1064语法错误求助

存储过程通过会话变量调用时的MySQL语法错误问题

我平时主要用MSSQL,最近给使用MySQL的客户处理任务,在DBeaver中碰到异常问题。

我创建的存储过程如下:

CREATE DEFINER=`myusr`@`%` PROCEDURE `mydb`.`udp_ClientApprovals_Display`(
    IN _BolSearchText varchar(100)
    , IN _BolManufSearchText varchar(100)
    , IN _ClientID int
    , IN _OrderBy varchar(50))
BEGIN
    SET @BolSearchText = _BolSearchText
        , @BolManufSearchText = _BolManufSearchText
        , @ClientID = _ClientID;
-- the rest of my code
END

直接传入字面量调用存储过程可正常执行:

CALL udp_ClientApprovals_Display('+test*', '', 1, 'Name');

但通过会话变量传递参数时,会返回如下错误:

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1

调用语句如下:

SELECT @BolSearchText := '+test*', @BolManufSearchText := '', @ClientID := 1, @OrderBy := 'Name';
CALL udp_ClientApprovals_Display(@BolSearchText, @BolManufSearchText, @ClientID, @OrderBy);

问题原因与解决方法

问题根源在于会话变量命名冲突和变量初始化方式的可靠性:

  1. 存储过程内部使用的会话变量@BolSearchText、@BolManufSearchText、@ClientID,和外部调用时的会话变量同名,导致变量值被意外覆盖,进而触发语法错误。
  2. 使用SELECT ... := ...初始化多个会话变量时,若某一赋值逻辑返回空结果集,会导致变量被设为NULL,干扰存储过程执行。

修正步骤:

  • 重命名存储过程内部的会话变量,避免和外部传入变量重名:
CREATE DEFINER=`myusr`@`%` PROCEDURE `mydb`.`udp_ClientApprovals_Display`(
    IN _BolSearchText varchar(100)
    , IN _BolManufSearchText varchar(100)
    , IN _ClientID int
    , IN _OrderBy varchar(50))
BEGIN
    -- 改用带前缀的会话变量,避免冲突
    SET @sp_BolSearchText = _BolSearchText
        , @sp_BolManufSearchText = _BolManufSearchText
        , @sp_ClientID = _ClientID;
-- the rest of my code
END
  • 改用SET语句初始化会话变量,比SELECT方式更稳定,避免空结果集导致的NULL赋值:
SET @BolSearchText = '+test*', @BolManufSearchText = '', @ClientID = 1, @OrderBy = 'Name';
CALL udp_ClientApprovals_Display(@BolSearchText, @BolManufSearchText, @ClientID, @OrderBy);

另外,若存储过程中涉及动态SQL拼接(比如使用_OrderBy参数排序),需注意防范SQL注入风险,建议通过白名单限制_OrderBy的可选值,或使用参数化的PREPARE/EXECUTE语句。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:12:38