Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Pl/sql loops

Estas en el tema de Pl/sql loops en el foro de Oracle en Foros del Web. Hola buenas, tengo este procedimiento. Código: DECLARE contador INTEGER; primero INTEGER; ultimo INTEGER; BEGIN primero:0; ultimo:120; FOR contador IN primero..ultimo LOOP INSERT INTO DIM_EDAD (PK, ...
  #1 (permalink)  
Antiguo 28/04/2009, 01:22
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 15 años, 4 meses
Puntos: 31
Pl/sql loops

Hola buenas, tengo este procedimiento.

Código:
DECLARE
    contador INTEGER;
    primero INTEGER;
    ultimo INTEGER;

BEGIN
    primero:0;
    ultimo:120;

    FOR contador IN primero..ultimo
    LOOP
         INSERT INTO DIM_EDAD (PK, GRUPO) SELECT contador,
          CASE WHEN contador between 0 and 4 THEN 1 
         WHEN contador between 5 and 9 THEN 2
         WHEN contador between 10 and 14 THEN 3
         WHEN contador between 15 and 19 THEN 4 
         WHEN contador between 20 and 24 THEN 5
         WHEN contador between 25 and 29 THEN 6 
         WHEN contador between 30 and 34 THEN 7
         WHEN contador between 35 and 39 THEN 8 
         WHEN contador between 40 and 44 THEN 9
         WHEN contador between 45 and 49 THEN 10 
         WHEN contador between 50 and 54 THEN 11
         WHEN contador between 55 and 59 THEN 12 
         WHEN contador between 60 and 64 THEN 13
         WHEN contador between 65 and 69 THEN 14 
         WHEN contador between 70 and 74 THEN 15
         WHEN contador between 65 and 69 THEN 16 
         WHEN contador between 70 and 74 THEN 17
         WHEN contador between 75 and 79 THEN 18 
         WHEN contador between 80 and 84 THEN 19
         WHEN contador > 84 THEN 20 
         FROM DUAL;
    END LOOP;
END;
Esto lo que hace me rellena esto:

TABLA

PK | GRUPO

0 | 1
1 | 1
2 | 1
3 | 1
4 | 1
5 | 2
6 | 2
7 | 2
8 | 2
9 | 2
10 | 3
11 | 3
12 | 3
13 | 3
14 | 3
15 | 4
.... | ...

Como veis me agrupa por cada 5 numeros, pero yo quiero parametrizar ese agrupamiento, para no tener que poner todos los when creo que la soluciones seria meter un LOOP dentro de un insert pero no hay forma...algo asi, pero nada, vamos

Código:
DECLARE
    contador INTEGER;
    primero INTEGER;
    ultimo INTEGER;
    variable INTEGER;
    agrupar INTEGER;

BEGIN
    primero:0;
    ultimo:120;
    variable:0;
    agruparA:0;
    agruparB:4;
    

    FOR contador IN primero..ultimo
    LOOP
         INSERT INTO DIM_EDAD (PK, GRUPO) SELECT contador,
         FOR variable IN primero..ultimo/agrupar
          CASE WHEN contador between agruparA and agruparB THEN variable+1; 
          agruparA = agruparA +5;
          agruparB = agruparB + 5;
        END;
         FROM DUAL;
    END LOOP;
END;
Creo que esto se podria hacer pero mi problema es que no se PL/SQL, alguna ayuda.

gracias
  #2 (permalink)  
Antiguo 28/04/2009, 05:06
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Pl/sql loops

Código:
declare

p number(8):=0;
u number(8):=100;

g number(8):=0;
m number(8):=0;

begin

for c in p..u loop

 m := mod(c,5); --el 5 es el valor que se puede parametrizar
 
 if ( m = 0 ) then
  g := g + 1;
 end if;
 
 insert into DIM_EDAD (PK, GRUPO) values (c,g);
 
end loop;

end;
Saludos
  #3 (permalink)  
Antiguo 29/04/2009, 04:31
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 15 años, 4 meses
Puntos: 31
Respuesta: Pl/sql loops

Me fue perfecto, lo que quiero intentar ahora es crearme una variable y meterle unos rangos (00,05,14,30,40,56)

y agruparlos por esos rangos, con lo que me has puesto creo que me valdra para lograrlo

gracias matanga
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:07.