Redshift 中的嵌套 While 循环
Posted
技术标签:
【中文标题】Redshift 中的嵌套 While 循环【英文标题】:Nested While Loop in Redshift 【发布时间】:2021-01-27 15:48:00 【问题描述】:我的 Table_1 看起来像这样
Parent_Id Child_Id Product Prod_count
1000 1 A 1
1000 2 A+B 1
1000 3 A 1
1000 4 B+C 1
2000 1 A 1
2000 2 B+C 1
2000 3 C 1
2000 4 D 1
我在这个过程中尝试在这里做嵌套循环,循环基于 Parent_Id,每个父母都有不同的孩子,所以也必须读取每一行。
我试过了
create or replace procedure sp_dummy(IN var1 int, IN var2 int, IN var3 int) as $$
Begin
create temp table find_id as(
select distinct parent_id,row_number() over(order by 1) as rw_num
from table_1
);
declare
tot_cnt int := (select count(distinct parent_id) from find_id );
init_loop int := 1;
in_init_loop int := 1;
in_tot_init_loop int;
v_parent_id int;
Begin
While init_loop <= tot_cnt
Loop
Raise info 'init_loop = %', Init_loop;
Execute 'Select parent_id into ' || v_parent_id || ' from find_id where rw_num = ' || Init_loop;
Raise info 'v_patient_id = %', v_patient_id;
Execute 'Select Count(*) into ' || in_tot_init_loop || ' from Table_1 where Parent_Id = ' || v_parent_id;
While in_init_loop <= in_tot_init_loop
Loop
Raise info 'in_init_loop = %', in_init_loop;
in_init_loop = in_init_loop + 1
End loop;
init_loop = init_loop + 1;
end loop;
End;
End;
$$ language plpgsql;
尝试此操作时出现错误无法执行空查询字符串 我放弃了尝试理解这个错误! :(
【问题讨论】:
【参考方案1】:这行似乎有问题:
Execute 'Select parent_id into ' || v_parent_id || ' from find_id where rw_num = ' || Init_loop;
v_parent_id
是空的,所以它会翻译成:
Select parent_id into NULL from find_id where rw_num = 1;
我想你其实是想写的:
SELECT INTO v_parent_id
parent_id
FROM find_id
WHERE rw_num = Init_loop;
是的,您实际上可以将 SQL 嵌入,而不必将其作为字符串传递给 EXECUTE
。看看Structure of PL/pgSQL - Amazon Redshift中的例子。
【讨论】:
以上是关于Redshift 中的嵌套 While 循环的主要内容,如果未能解决你的问题,请参考以下文章
一文了解Python中的循环(for while break continue 嵌套循环...)