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

如何在MySQL 8中无警告地调用带命名参数的存储过程?

MySQL 8 存储过程命名参数的正确调用方式

你之前遇到的警告,根源是在CALL语句中直接给用户会话变量(@开头)赋值的写法在MySQL 8中已被废弃,虽然能得到结果,但会触发废弃警告。以下是两种符合规范的命名参数调用方式:

方式一:直接使用存储过程参数名赋值(推荐)

假设你的存储过程定义如下:

CREATE PROCEDURE sp_getRefundedOrders(
    IN in_productId INT,
    IN in_creatorId INT,
    IN in_operationType VARCHAR(50),
    IN in_createdAtFrom DATE,
    IN in_createdAtTill DATE
)
BEGIN
    -- 存储过程业务逻辑
END;

调用时直接使用存储过程定义的参数名(无需加@前缀)赋值,写法如下:

CALL sp_getRefundedOrders(
    in_productId := 1,
    in_creatorId := 1,
    in_operationType := 'PAYMENT_REFUNDED',
    in_createdAtFrom := '2024-01-01',
    in_createdAtTill := '2024-11-30'
);

这种写法完全符合MySQL 8的语法规范,既保留了命名参数的灵活性(参数顺序可任意调整),又不会触发任何警告。

方式二:先定义用户变量再传入(适合参数复用场景)

如果需要在多个操作中复用参数值,可以先通过SET语句单独赋值用户变量,再在CALL中传入:

-- 先赋值变量
SET @productId = 1, 
    @creatorId = 1, 
    @operationType = 'PAYMENT_REFUNDED', 
    @createdAtFrom = '2024-01-01', 
    @createdAtTill = '2024-11-30';

-- 调用存储过程时传入变量
CALL sp_getRefundedOrders(
    in_productId := @productId,
    in_creatorId := @creatorId,
    in_operationType := @operationType,
    in_createdAtFrom := @createdAtFrom,
    in_createdAtTill := @createdAtTill
);

这种方式避免了在CALL语句中直接赋值用户变量的废弃写法,同样不会触发警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:52:39