-5

请让我知道如何从以下查询中获取 '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 行

4

2 回答 2

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;
...

(似乎有点毫无意义,但不知道你的实际情况是什么,很难建议如何改进逻辑。)

于 2013-06-21T08:32:20.620 回答
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;

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

于 2013-06-21T13:42:01.733 回答