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

Snowflake存储过程报错:绑定变量未设置问题求助

Snowflake存储过程调用报错:snowflake bind variable not set

创建了如下Snowflake SQL存储过程,创建成功,但调用时提示snowflake bind variable not set错误。

存储过程代码

CREATE OR REPLACE PROCEDURE some_proc_name("LOAD_MONTH" INTEGER, "LOAD_YEAR" INTEGER)
RETURNS VARCHAR(16777216)
LANGUAGE SQL
EXECUTE AS CALLER
AS declare
    result string;
    v_EXTRACT_DATE DATE;
    cur CURSOR FOR 
        SELECT distinct EXTRACT_DATE
        FROM some_table_name
        where month(EXTRACT_DATE) = :LOAD_MONTH and year(EXTRACT_DATE) = :LOAD_YEAR; 
begin
   return 'SUCCESS';
end;

调用代码

call some_proc_name(1,2025);

错误信息

调用时触发错误:snowflake bind variable not set

已尝试的解决方法(均无效)

  • 将:LOAD_MONTH替换为identifier(:LOAD_MONTH)
  • 移除LOAD_MONTH参数的引号
  • 将cur变量移至begin块内用let cur定义

正确解决方案

问题根源在于declare块中定义的游标无法直接引用存储过程参数作为绑定变量,因为declare块的解析时机早于参数绑定流程。需将游标定义移至begin块内,并通过USING子句传递参数,修改后的代码如下:

CREATE OR REPLACE PROCEDURE some_proc_name("LOAD_MONTH" INTEGER, "LOAD_YEAR" INTEGER)
RETURNS VARCHAR(16777216)
LANGUAGE SQL
EXECUTE AS CALLER
AS declare
    result string;
    v_EXTRACT_DATE DATE;
begin
    -- 将游标定义移至begin块内,使用?占位符+USING传递参数
    let cur CURSOR FOR 
        SELECT distinct EXTRACT_DATE
        FROM some_table_name
        where month(EXTRACT_DATE) = ? and year(EXTRACT_DATE) = ?
        USING (:LOAD_MONTH, :LOAD_YEAR);
    
    return 'SUCCESS';
end;

内容的提问来源于stack exchange,提问作者lil-wolf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:12:33