Snowflake游标执行报错:无效标识符RECORD.TABLE_NAME
解决Snowflake存储过程中引用游标变量报错的问题
问题分析
你遇到的报错是因为在Snowflake存储过程的SQL语句中,直接引用游标循环变量record.table_name的方式不符合语法要求。Snowflake规定,在SQL语句内部访问PL/SQL变量时,必须在变量名前添加冒号(:)前缀,否则系统会将其当作普通SQL标识符,进而因找不到对应对象报错。
修正后的完整代码
DROP TABLE IF EXISTS table_names; CREATE TEMPORARY TABLE table_names (tname TEXT); DECLARE c1 CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type = 'BASE TABLE' ORDER BY table_name; BEGIN FOR record IN c1 DO INSERT INTO table_names SELECT GET_DDL('TABLE', :record.table_name , true); END FOR; END;
关键修改说明
- 仅需将
GET_DDL函数中的record.table_name改为:record.table_name,通过添加冒号明确标识这是一个PL/SQL变量,而非SQL对象,即可解决标识符无效的报错问题。
内容的提问来源于stack exchange,提问作者okay_google
相关产品推荐
相关产品推荐

