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

Snowflake SQL存储过程运行报错:无效标识符'C_KEY_REC.KEY_NM'求助

Snowflake SQL存储过程游标遍历错误解决方案

错误根源

你遇到的invalid identifier 'C_KEY_REC.KEY_NM'错误,是因为手动调用OPEN cur_key破坏了Snowflake SQL存储过程的游标自动管理机制。在Snowflake的FOR ... IN <cursor>循环语法中,系统会自动负责游标的打开、逐行遍历和关闭操作,提前打开游标会导致游标状态异常,循环变量c_key_rec无法正确绑定游标返回的字段,从而触发标识符无效的错误。

修正后的完整代码

CREATE OR REPLACE TABLE KEY_TBL
(
     key_nm         VARCHAR
    ,key_val        VARCHAR
    ,active_yn      VARCHAR
);

INSERT INTO KEY_TBL(key_nm, key_val, active_yn )
VALUES
     ('KEY_NAME_1','KEY_VAL_1', 'Y')
    ,('KEY_NAME_2','KEY_VAL_2', 'Y')
;

CREATE OR REPLACE TABLE LOOP_CHK
(
     key_nm         VARCHAR
    ,key_val        VARCHAR
);

CREATE OR REPLACE PROCEDURE SP_LOOP_TEST()
RETURNS VARCHAR
LANGUAGE SQL
AS
DECLARE
    cur_key    CURSOR FOR SELECT key_nm, key_val FROM KEY_TBL WHERE active_yn = 'Y' ORDER BY key_nm;

BEGIN
    -- 移除多余的OPEN cur_key语句,由FOR循环自动管理游标
    FOR c_key_rec IN cur_key
    DO
        INSERT INTO LOOP_CHK(key_nm, key_val)
        VALUES(c_key_rec.key_nm, c_key_rec.key_val);
    END FOR;
    RETURN '1';
END;
;

CALL SP_LOOP_TEST();

核心注意事项

  • 游标自动生命周期管理:Snowflake SQL存储过程的FOR ... IN <cursor>循环是封装好的游标遍历方式,无需手动执行OPEN/CLOSE操作,手动干预会导致状态冲突。
  • 循环变量字段引用:循环变量(如c_key_rec)直接通过.访问游标查询中的列名即可,确保列名与游标查询中的字段完全匹配(Snowflake默认大小写不敏感,除非列名用双引号定义)。
  • 手动游标控制方案(可选):如果需要更精细的游标控制(如中断遍历、部分读取),可以使用OPEN/FETCH/CLOSE组合,示例代码如下:
CREATE OR REPLACE PROCEDURE SP_LOOP_TEST_MANUAL()
RETURNS VARCHAR
LANGUAGE SQL
AS
DECLARE
    cur_key    CURSOR FOR SELECT key_nm, key_val FROM KEY_TBL WHERE active_yn = 'Y' ORDER BY key_nm;
    v_key_nm   VARCHAR;
    v_key_val  VARCHAR;
BEGIN
    OPEN cur_key;
    FETCH cur_key INTO v_key_nm, v_key_val;
    WHILE (SQLCODE = 0) DO
        INSERT INTO LOOP_CHK(key_nm, key_val) VALUES(v_key_nm, v_key_val);
        FETCH cur_key INTO v_key_nm, v_key_val;
    END WHILE;
    CLOSE cur_key;
    RETURN '1';
END;
;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:17