web-dev-qa-db-fra.com

Boucle à travers les valeurs prédéfinies

Y at-il un moyen de faire un "pour chaque" dans Oracle, quelque chose comme ceci:

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

Je sais que tu peux faire quelque chose comme:

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;

Mais n'y a-t-il pas moyen de le faire plus gentiment? Définir un ensemble de valeurs et les parcourir?

Merci.

20
JGS

Vous pouvez le faire, mais probablement pas aussi lisse que vous le souhaitez:

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;

Si vous créez un type dans la base de données:

create type number_table is table of number;

alors vous pouvez faire ceci:

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;
32
Tony Andrews

Cela vient du commentaire de A.B.Cade sur la réponse actuellement acceptée , mais je la trouve beaucoup plus propre et mérite plus d'attention:

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;
0
ArtOfWarfare