Вопрос по – Прокрутка предварительно определенных значений

20

Есть ли способ сделать «для каждого»? в оракуле, примерно так:

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;

Но разве нет способа сделать это лучше? Определение набора значений и итерация по ним?

Благодарю.

Положите список значений в таблицу. Теперь вы можете перебирать значения в таблице с помощью курсора. Rene

Ваш Ответ

2   ответа
33

Вы могли бы сделать это, хотя, вероятно, не так гладко, как вам бы хотелось:

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;
Error: User Rate Limit Exceededfor r in (select column_value from table(sys.dbms_debug_vc2coll(1,3,5))) loop
Error: User Rate Limit Exceeded
0

Это происходит из комментария А.Б. Кейда ов настоящее время принятый ответНо я нахожу это намного чище и заслуживает большего внимания:

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;

Похожие вопросы