Tema: Pl/sql loops
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/04/2009, 01:22
Avatar de triqui
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