如何在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
相关产品推荐
相关产品推荐

