-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 つの要素の配列を処理します。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 に答える