执行Immediate Loop PL / SQL

时间:2016-10-05 15:56:24

标签: oracle plsql nested combinations execute

我可以使用"立即执行"与周期? 我需要在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。 我该怎么做? :)

提前感谢您的建议!

2 个答案:

答案 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;