对于PL / SQL块中的循环

时间:2013-06-21 08:19:15

标签: oracle plsql oracle10g

请告诉我如何从以下查询中获取'AA''BB''CC'

declare
   type arrays1 is varray(3) of varchar2(30);
   a1 arrays1 := arrays1('A', 'B', 'C');
   type arrays2 is varray(3) of varchar2(30);
   a2 arrays2 := arrays2('A', 'B', 'C');
begin
   for i in 1..a1.count loop
      for j in 1..a2.count loop
         insert into dummy_insert  values(concat(a1(i),a2(j)));
         commit;
      end loop;
   end loop;
end;

现在我得到了9行

2 个答案:

答案 0 :(得分:2)

您可以测试值是否相同:

...
  for i in 1..a1.count loop
    for j in 1..a2.count loop
      if a1(i) = a2(j) then
        insert into dummy_insert values(concat(a1(i),a2(j)));
      end if;
    end loop;
  end loop;
...

(看起来有点毫无意义,但不知道你现实世界的情况是什么,很难建议如何改进逻辑。)

答案 1 :(得分:0)

  

“现在我得到了9行”

外部循环遍历三个元素的数组。嵌套循环遍历外部循环中每个元素的三个元素的数组。 3 * 3 = 9。

  

“如何从下面的查询中获取'AA''BB''CC'”

应用奥卡姆剃刀并丢弃内环:

declare
   type arrays1 is varray(3) of varchar2(30);
   a1 arrays1 := arrays1('A', 'B', 'C');
begin
   for i in 1..a1.count loop
         insert into dummy_insert  values(concat(a1(i),a1(i)));
   end loop;
   commit;
end;

请注意,提交内部循环是不好的做法。显然它与这样的玩具代码没有任何区别,但是如果我们总是做正确的事情,那么当它真正重要时我们就不会做错事。