我可以使用"立即执行"与周期? 我需要在pl / sql中生成值的组合。 关于这一点,我想要为循环调用一系列嵌套动力学。
实施例: 第1列具有以下值:A,B 第2列具有以下值:C,D,E
我想生成这个组合: AC / AD / AE / BC / BD / BE
我想要获得这样的话:
for i in 1..count.column1
for j in 1..count.column2
dbms_output.put_line(column1.value(i)||'-'||column1.value(j));
end loop;
end loop;
由于我不知道列数(变量), 我可以立即使用执行吗?
declare
sql_stmt varchar2(200);
begin
sql_stmt := 'for i in 1..count.column1 for j in 1..count.column2 dbms_output.put_line(column1.value(i)||'-'||column1.value(j)); end loop; end loop';
execute immediate sql_stmt;
end;
但我有错误ORA-06512。 我该怎么做? :)
提前感谢您的建议!
答案 0 :(得分:2)
如果你真的想在使用嵌套循环的PL / SQL中慢慢地这样做,你不需要任何动态的东西。你只想要
for i in (select distinct column1
from your_table)
loop
for j in (select distinct column2
from your_table)
loop
dbms_output.put_line( i.column1 || j.column2 );
end loop;
end loop;
但绝大多数情况下,你最好在SQL中执行此操作
with col1 as (
select distinct col1 val
from your_table
),
col2 as (
select distinct col2 val
from your_table
)
select col1.val || col2.val
from col1
cross join col2
答案 1 :(得分:0)
我认为您可以使用此select语句轻松获取组合。
SELECT DISTINCT t1.col1, t2.col2
FROM table_name t1, table_name t2;