2013-06-21 92 views
-5

请让我知道如何从下面查询for循环PL/SQL块

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; 

现在得到“AA”'BB“CC”我得到9行

+0

不要大叫。标题已经以粗体显示并且尺寸较大。 – 2013-06-21 08:23:09

回答

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; 

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

+1

你是不是指'concat(a1(i),a1(i))'? –

+0

@BobJarvis - 当然是我的意思。发现得好! – APC

+1

你已经删除了第二个数组。如果删除这样的东西是可以接受的答案,为什么不把整个代码改为'begin insert into dummy_insert values('AA');插入dummy_insert值('BB');插入dummy_insert值('CC');承诺;结束;'... :) –

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

(似乎一种毫无意义的,但没有任何想法是什么你真实世界的情况是很难建议如何提高逻辑。)