为何Snowflake中INTO语句无法将表记录数存入变量?
Snowflake中SELECT ... INTO赋值变量报错的原因
Snowflake的INTO子句根本不是用来给会话变量赋值的,它的核心用途分两种:要么是把查询结果写入新表(包括临时表、transient表),要么是在**存储过程/用户定义函数(UDF)**的代码块里给局部变量赋值。
你写的这段代码:
SET myNo = 0; SELECT COUNT(*) INTO :myNo2 FROM myTable;
之所以报错INTO clause is not allowed in this context,是因为在普通的SQL会话(非存储过程/UDF环境)里,INTO只能用来创建新表,比如这种写法是合法的:
SELECT COUNT(*) INTO my_count_table -- 创建新表并把统计结果插入进去 FROM myTable;
它没法直接给你用SET定义的会话级变量赋值。
而你成功的写法SET myNo = (SELECT COUNT(*) FROM myTable);,是Snowflake官方支持的会话变量赋值标准语法——通过标量子查询直接把结果赋值给会话变量,这才是普通会话里给变量赋值的正确姿势。
再明确下两种写法的适用场景:
SELECT ... INTO:- 普通SQL会话:用来创建新表并填充查询结果
- 存储过程/UDF内部:给局部变量赋值(必须在PL/SQL风格的代码块里用)
SET 变量 = (子查询):专门给普通SQL会话里的会话级变量赋值
内容的提问来源于stack exchange,提问作者MBH
相关产品推荐
相关产品推荐

