Цикл через предварительно определенные значения
Есть ли способ сделать "для каждого" в оракуле, что-то вроде этого:
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;
Но нет ли способа сделать это лучше? Определение набора значений и итерация через них?
Спасибо.
Ответы
Ответ 1
Вы можете сделать это, хотя, вероятно, не так гладко, как хотите:
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;
Ответ 2
Это происходит из комментария ABCade относительно принятого в настоящее время ответа, но я нахожу его намного чище и заслуживает большего внимания:
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;