2012-05-29 3 views
16

C'è un modo per fare un "per ogni" in Oracle, qualcosa di simile:Loop attraverso i valori pre definiti

begin 
    for VAR in {1,2,5} 
    loop 
    dbms_output.put_line('The value: '||VAR); 
    end loop; 
end; 

So che si può fare qualcosa di simile:

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; 

Ma isn c'è un modo per farlo in un modo migliore? Definizione di un insieme di valori e iterazione attraverso di essi?

Grazie.

+0

Inserire l'elenco di valori in una tabella. Ora puoi scorrere i valori nella tabella usando un cursore. – Rene

risposta

28

Si potrebbe fare questo, anche se probabilmente non come slick come vuoi:

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; 

Se si crea un tipo nel database:

create type number_table is table of number; 

allora si può fare questo:

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

In realtà non è necessario creare un tipo nel DB, si può fare 'for r in (selezionare column_value dalla tabella (sys.dbms_debug_vc2coll (1,3,5))) loop' –