调用Snowflake存储过程传参时出现Invalid Identifier Error求助
Snowflake存储过程调用报错:invalid identifier 'D' 解决方法
问题根源
Snowflake的SQL存储过程中,CALL语句里引用本地变量时必须添加冒号(:)前缀。直接写变量名会被Snowflake当作数据库对象标识符(如表名、列名)解析,而非存储过程内的本地变量,这就触发了invalid identifier 'D'的编译错误。
修正后的代码示例
位置参数调用方式
BEGIN LET D VARCHAR(128) := 'T1'; LET L VARCHAR(128) := ''; CALL Myproc(:D) INTO L; -- 本地变量前添加冒号 RETURN D||'-'||L; END;
命名参数调用方式
BEGIN LET D VARCHAR(128) := 'T1'; LET L VARCHAR(128) := ''; CALL Myproc(X => :D) INTO L; -- 本地变量前添加冒号 RETURN D||'-'||L; END;
补充说明
使用常量'T1'调用时正常,是因为常量会被直接解析为字符串值,无需变量引用标识;而本地变量必须通过:变量名的形式明确告知Snowflake这是存储过程内部的本地变量,避免与数据库对象混淆。
内容的提问来源于stack exchange,提问作者Vladimir Beyder
相关产品推荐
相关产品推荐

