2012-05-29 11 views
16

¿Hay una manera de hacer un "para cada" en Oracle, algo como esto:Bucle a través de los valores pre definido

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

Sé que usted puede hacer algo como:

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; 

Pero ISN ¿Hay alguna manera de hacer esto de una manera más agradable? ¿Definir un conjunto de valores e iterar a través de ellos?

Gracias.

+0

Ponga la lista de valores en una tabla. Ahora puede recorrer los valores en la tabla usando un cursor. – Rene

Respuesta

28

Se podría hacer esto, aunque probablemente no tan elegante como desee:

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; 

Si crea un tipo en la base de datos:

create type number_table is table of number; 

entonces usted puede hacer esto:

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

En realidad, usted no necesita crear un tipo en el PP, que puede hacer 'para r en (seleccione column_value de la tabla (sys.dbms_debug_vc2coll (1,3,5))) loop' –

Cuestiones relacionadas