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

MySQL存储过程中调用存储过程并赋值变量的语法错误问题

问题解答
  • 此问题并非重复问题,另一问题特指次级存储过程创建临时表供主存储过程读取,而本问题是要接收次级存储过程的返回值。正确方案是将次级程序改为Function而非存储过程。

问题描述

我尝试在一个存储过程内将另一个存储过程的调用结果赋值给局部变量,但执行CREATE语句时MySQL提示语法错误,却找不到问题所在。

报错代码行:

set warrantyVersion = call GetActiveDefaultWarrantyTerm();

单独调用该存储过程可正常执行,后续调用TargetSerialAtWarrantyTerm也无问题,错误信息为SQL Error [1064] [42000]。我试过多种写法,包括加括号、用SELECT获取调用结果、set warrantyVersion = cast(call GetActiveDefaultWarrantyTerm() as varchar(16))(有无SELECT都试过),均未解决。

相关代码

主存储过程

create procedure AddServiceRecordToProduct(...args...)
begin
    declare warrantyVersion varchar(16);
    
    ...error checking...
    
    -- make it exist
    insert into servicerecord...;
    
    -- create a warranty cross-ref, if necessary
    set warrantyVersion = call GetActiveDefaultWarrantyTerm();
    call TargetSerialAtWarrantyTerm(serialin, warrantyVersion);
end;

被调用的存储过程(Version为varchar(16)类型)

create procedure GetActiveDefaultWarrantyTerm()
begin
    select w.Version from ... limit 1;
end;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:12:04