web-dev-qa-db-ja.com

事前定義された値をループする

次のようなOracleで「for each」を実行する方法はありますか?

begin
  for VAR in {1,2,5}
  loop
    dbms_output.put_line('The value: '||VAR);
  end loop;
end;

私はあなたが次のようなことができることを知っています:

begin
  for VAR in 1..5
  loop
    if VAR in(1,3,5) then
      dbms_output.put_line('The value: '||VAR);
    end if;
  end loop;
end;

しかし、これをより良い方法で行う方法はありませんか?値のセットを定義し、それらを繰り返し処理しますか?

ありがとう。

24
JGS

あなたはこれを行うことができますが、おそらくあなたが望むほど滑らかではありません:

declare
  type nt_type is table of number;
  nt nt_type := nt_type (1, 3, 5);
begin
  for i in 1..nt.count loop
    dbms_output.put_line(nt(i));
  end loop;
end;

データベースにタイプを作成する場合:

create type number_table is table of number;

その後、これを行うことができます:

begin
  for r in (select column_value as var from table (number_table (1, 3, 5))) loop
    dbms_output.put_line(r.var);
  end loop;
end;
42
Tony Andrews

これは 現在受け入れられている回答 に関するA.B.Cadeのコメントから来ていますが、私はそれがよりクリーンでより注目に値することに気づきます。

BEGIN
  FOR i IN (SELECT column_value FROM table(sys.dbms_debug_vc2coll(1, 3, 5))) LOOP
    dbms_output.put_line(i.column_value);
  END LOOP;
END;
2
ArtOfWarfare