Snowflake平台:无需游标,用存储过程跨表填充数据可行吗?
解决方案
可以不使用游标,通过纯SQL实现需求。利用Snowflake的LATERAL关联语法,结合存储过程的调用结果来填充目标表,具体语句如下:
INSERT INTO test_2 (num, doubled) SELECT t.num, res.$1 FROM test_1 t, LATERAL (CALL double_val(t.num)) res;
说明:
LATERAL关键字允许对test_1中的每一行调用double_val存储过程,将存储过程返回的单个值作为结果集的一部分关联到原表行。res.$1表示存储过程返回结果集中的第一列(即翻倍后的值)。
执行后验证结果:
SELECT * FROM test_2;
输出结果如下:
| num | doubled |
|---|---|
| 1 | 2 |
| 2 | 4 |
| 3 | 6 |
内容的提问来源于stack exchange,提问作者SecretIndividual
相关产品推荐
相关产品推荐

