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

Snowflake存储过程调用UDTF传入绑定参数时提示无效标识符求助

解决Snowflake存储过程传递参数到UDTF时的"invalid identifier"错误

问题原因

你遇到的invalid identifier 'LANGUAGE_KEY'错误,根源是Snowflake的标识符大小写规则:

  • 用双引号包裹的标识符(比如你定义的"Language_key")是大小写敏感的,会保留原有的大小写格式。
  • 未加双引号的标识符会被Snowflake自动转换为大写。

你在存储过程内部引用参数时用了:language_key,Snowflake会将其自动转为LANGUAGE_KEY,但你定义的参数是Language_key(带双引号的大小写混合名),两者不匹配,因此触发了标识符不存在的错误。

解决方案

有两种可行的修改方式:

方式一:保持参数的大小写敏感定义,引用时匹配大小写

在引用参数时,用括号加双引号包裹参数名,确保Snowflake识别到正确的大小写参数:

CREATE OR REPLACE PROCEDURE MEDICATION_MODEL_NLS_Test("Language_key" VARCHAR DEFAULT 'en')
RETURNS TABLE ()
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
DECLARE
    res RESULTSET;
BEGIN
    res := (SELECT *
            FROM TABLE(GET_MEDICATION(:("Language_key"))));
    RETURN TABLE(res);
END
$$;

方式二:取消参数的大小写敏感定义

定义参数时去掉双引号,让Snowflake自动将参数名转为大写,此时内部引用时无论大小写都会被识别为大写参数:

CREATE OR REPLACE PROCEDURE MEDICATION_MODEL_NLS_Test(Language_key VARCHAR DEFAULT 'en')
RETURNS TABLE ()
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
DECLARE
    res RESULTSET;
BEGIN
    res := (SELECT *
            FROM TABLE(GET_MEDICATION(:language_key)));
    RETURN TABLE(res);
END
$$;

两种方式都能解决参数传递的问题,你可以根据自己的标识符命名习惯选择其中一种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:27:38