2012-05-29 96 views
16

有沒有辦法做了「爲每個」在Oracle中,這樣的事情:循環通過預先定義的值

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; 

但是,這不是有沒有辦法以更好的方式做到這一點?定義一組值並遍歷它們?

謝謝。

+0

將值列表放入表中。您現在可以使用遊標循環訪問表中的值。 – Rene

回答

28

你能做到這一點,儘管可能不一樣光滑,只要你願意:

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; 
+6

實際上你不需要在數據庫中創建一個類型,你可以在for()中選擇column_value(sys.dbms_debug_vc2coll(1,3,5)))loop' –