无法执行代码块:Snowflake匿名块绑定变量语法错误求助
解决Snowflake存储过程中GET_OBJECT_REFERENCES的语法错误
问题描述
执行存储过程时触发编译错误:SQL compilation error: syntax error line 1 at position 21 unexpected ':'
原错误代码:
execute immediate $$ declare TABLE_CATALOG varchar default ('DB'); TABLE_SCHEMA varchar default ('SCH'); VIEW_NAME varchar default ('VIEW'); VEW resultset default (SELECT * from table(GET_OBJECT_REFERENCES(DATABASE_NAME =>:TABLE_CATALOG , SCHEMA_NAME =>:TABLE_SCHEMA, OBJECT_NAME =>:VIEW_NAME))); begin return table(VEW); end; $$;
单独使用硬编码参数调用GET_OBJECT_REFERENCES可正常运行:
SELECT * from table(GET_OBJECT_REFERENCES(DATABASE_NAME =>'DB' , SCHEMA_NAME =>'SCH', OBJECT_NAME =>'VIEW'))
修正方案
存储过程内部引用本地变量时,无需使用:变量名的外部绑定语法,直接使用变量名即可。修正后的代码如下:
execute immediate $$ declare TABLE_CATALOG varchar default ('DB'); TABLE_SCHEMA varchar default ('SCH'); VIEW_NAME varchar default ('VIEW'); VEW resultset default (SELECT * from table(GET_OBJECT_REFERENCES(DATABASE_NAME => TABLE_CATALOG, SCHEMA_NAME => TABLE_SCHEMA, OBJECT_NAME => VIEW_NAME))); begin return table(VEW); end; $$;
错误原因
Snowflake中,:变量名语法仅用于外部绑定变量(如客户端传递的参数)。在存储过程内部声明的本地变量,在静态SQL语句中直接引用变量名即可,添加冒号会被解析为无效语法,触发编译错误。
内容的提问来源于stack exchange,提问作者Smart003
相关产品推荐
相关产品推荐

