循环遍历预定义的值
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循环将一个二维数组的值付给另外一个二维数组