带有sql子查询的游标作为参数出现在BigQuery中



我在上一篇文章(BigQuery中的游标(中发现了一种在BigQuery上声明游标的方法。当游标子查询不作为参数存在时,这种方法效果很好。

目前,我正在Netezza中进行FOR..IN EXECUTE构建。它的行为就像一个游标构造,除了这里的sql是一个动态sql。这个动态sql首先被执行,然后构造归结为一个简单的游标语句。

考虑以下用例,其中子查询作为参数存在。

CREATE or replace PROCEDURE  myproc(varchar(256))
RETURNS INT4
LANGUAGE NZPLSQL
AS 
BEGIN_PROC 
declare 
sqlstr alias for $1;              ---- sqlStr is a parameter
r1 record;
begin 
FOR r1 IN EXECUTE sqlstr         ---- sqlStr is evaluated after that it boils down to cursor statement.
loop 
insert into t1 values r1.c1;
end loop;
end;
END_PROC@

有没有类似的方法可以用子查询作为BigQuery的参数来声明游标?

从形式上讲,LOOP和EXECUTE IMMEDIATE都可以在BigQuery中使用,并且有很好的文档记录
实际上-使用LOOP来模拟真实表的游标是非常无效的,在BigQuery中是不允许的,除非你有这样做的用例
但几乎在100%的情况下,你可以用批处理的方式(而不是使用游标(表达你的逻辑

同时,如果表不是那么大(例如查找选项卡le(,您可以将表行选择到数组中,然后循环遍历运行execute的数组元素,立即获取结果并将其插入目标表

最新更新