循环遍历预定义的值

Posted

技术标签:

【中文标题】循环遍历预定义的值【英文标题】:Loop through pre defined values 【发布时间】:2012-06-03 14:50:29 【问题描述】:

有没有办法在 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;

但是没有更好的方法吗?定义一组值并遍历它们?

谢谢。

【问题讨论】:

将值列表放入表格中。您现在可以使用光标遍历表中的值。 【参考方案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;

【讨论】:

其实不需要在DB中创建类型,可以for r in (select column_value from table(sys.dbms_debug_vc2coll(1,3,5))) loop @A.B.Cade - 请将此作为答案,以便获得适当的可见性。如果您在几天内不这样做,我会自己添加它作为答案。【参考方案2】:

这来自 A.B.Cade 对 currently accepted answer 的评论,但我发现它更干净,值得更多关注:

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;

【讨论】:

谢谢。对于任何需要字符串值的解决方案的人:它也可以将字符串作为参数传递sys.dbms_debug_vc2coll('a', 'b', 'c')

以上是关于循环遍历预定义的值的主要内容,如果未能解决你的问题,请参考以下文章

java中何用for循环将一个二维数组的值付给另外一个二维数组

JS如何遍历字符串

手写选择排序--Java

从数组中删除未定义的值

以最节省内存的方式循环自定义对象的 NSMutableArray

循环遍历 Mongoose 结果返回未定义