Snowflake cloud data platform 如何替换snowflake.execute语句中的循环结果?

Snowflake cloud data platform 如何替换snowflake.execute语句中的循环结果?,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正在寻找一种方法来迭代具有id1、id2列的结果集,并传递要在内部查询中使用的resultset列值,如下所示 结果集的变量 专栏1 专栏2 例如: 选择*从月份交叉联接选择列1作为id1,选择列2作为id2 从mytable中选择地理位置,其中id1=column1,id2=column2 但是,当我执行存储过程时,我遇到以下错误。非常感谢任何指点。多谢各位 错误: 存储过程测试过程中的执行错误:SQL编译错误:错误行8的位置81雪花处的标识符“COLUMN2”无效。执行,第14行的位置10

我正在寻找一种方法来迭代具有id1、id2列的结果集,并传递要在内部查询中使用的resultset列值,如下所示

结果集的变量

专栏1 专栏2 例如:

选择*从月份交叉联接选择列1作为id1,选择列2作为id2 从mytable中选择地理位置,其中id1=column1,id2=column2

但是,当我执行存储过程时,我遇到以下错误。非常感谢任何指点。多谢各位

错误:

存储过程测试过程中的执行错误:SQL编译错误:错误行8的位置81雪花处的标识符“COLUMN2”无效。执行,第14行的位置10

完整查询


代码至少有两个问题。首先,var定义了一个变量,它是一次性操作。在这种情况下,需要将其移出while循环:

// Loop through the results, processing one row at a time... 
while (result_set1.next())  {
   var column1 = result_set1.getColumnValueAsString(1);
   var column2 = result_set1.getColumnValueAsString(2);
这是一个简单的解决方案:

// Loop through the results, processing one row at a time... 
var column1;
var column2;
while (result_set1.next())  {
   column1 = result_set1.getColumnValueAsString(1);
   column2 = result_set1.getColumnValueAsString(2);
另一个问题是,代码将column2指定为SQL中的文字列名,而不是变量。您可以这样说,因为错误消息将变量名大写,所以Snowflake正在查找COLUMN2,但找不到它。column1还有一个用法,它似乎应该是一个替换变量

您可以通过将其作为替换变量来修复此问题。更改这两行:

select * from months cross join (select column1 AS "id1",column2 AS "id2")
。。。而这个

Select "GEOGRAPHY" from mytable WHERE id1 = column1 and id2 = column2
为此:

select * from months cross join (select ${column1} AS "id1", ${column2} AS "id2")
。。。而这个

Select "GEOGRAPHY" from mytable WHERE id1 = column1 and id2 = ${column2}
请注意,${replacement_variable}语法仅在JavaScript中使用backticks定义字符串时有效。当使用单引号或双引号终止字符串时,它将不起作用

超过这两个可能会暴露其他人,但可能会让它只是运行

Select "GEOGRAPHY" from mytable WHERE id1 = column1 and id2 = ${column2}