Oracle - LISTAR PERIODOS PARA UN RANGO YYYYMM

 
Vista:
sin imagen de perfil
Val: 17
Ha aumentado 1 puesto en Oracle (en relación al último mes)
Gráfica de Oracle

LISTAR PERIODOS PARA UN RANGO YYYYMM

Publicado por Alejandro (10 intervenciones) el 23/10/2018 16:51:42
Hola amigos. por favor me podrian ayudar a resolver esto:

Tengo un archivo de parámetros llamado "periodos" con estos datos:
periodo_inicial ; periodo_final
201711; 201803

Necesito generar una lista con los periodos contenidos para el rango descrito en el archivo.
201711
201712
201801
201802
201803

Sin embargo no he podido dar con la solución por que me genera mas registros de los que debe. Acá les dejo mi código para que me ayuden. les agradezco su colaboración .

1
2
3
4
5
6
7
8
9
10
11
DECLARE
        V_FCH_INI     VARCHAR2 (6) := '201712';
        V_FCH_FIN    VARCHAR2 (6) := '201802';
 
    BEGIN
        WHILE V_FCH_INI <= V_FCH_FIN
        LOOP
            DBMS_OUTPUT.PUT_LINE ( 'V_FCH_INI = ' || V_FCH_INI );
            V_FCH_INI := V_FCH_INI + 1;
        END LOOP;
END;

Me esta generando esta Salida.

V_FCH_INI = 201712
V_FCH_INI = 201713
V_FCH_INI = 201714
V_FCH_INI = 201715
V_FCH_INI = 201716
V_FCH_INI = 201717
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ing. Elvis Muñoz Pruna
Val: 209
Plata
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

LISTAR PERIODOS PARA UN RANGO YYYYMM

Publicado por Ing. Elvis Muñoz Pruna (102 intervenciones) el 23/10/2018 22:08:52
Estimado el problema radica en que no le esta dando el tratamiento como fecha a las variables que esta usando ademas ese codigo a simple vista sin compilarlo te sale un error que es el contador que haces.... cuando es que a una variable tipo varchar2 puede hacer una operación aritmetica... jajaja, al inicio queria hacerlo a la antiguita... pero despues me di cuenta que existe una funcion que me facilito el problema...
Adjunto el codigo que envias pero algo modificado y que esta funcional, espero haberte ayudado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE
  V_FCH_INI VARCHAR2(10) := '201711';
  V_FCH_FIN VARCHAR2(10) := '201803';
  Ln_Meses  NUMBER(10) := 0;
  Lv_Fecha  VARCHAR2(10) :=NULL;
BEGIN
  WHILE ADD_MONTHS( trunc(to_date(V_FCH_INI, 'yyyymm'), 'mm') , Ln_Meses)  <=
        to_date(V_FCH_FIN, 'yyyymm')
  LOOP
    Lv_Fecha :=TO_CHAR(ADD_MONTHS( trunc(to_date(V_FCH_INI, 'yyyymm'), 'mm') , Ln_Meses),'YYYYMM');
    DBMS_OUTPUT.put_line( Lv_Fecha);
    --    DBMS_OUTPUT.PUT_LINE('V_FCH_INI = ' || V_FCH_INI); /* no va porque lo que muestras ya es un resultado fecha pero un cast de varchar2*/
    --    V_FCH_INI := V_FCH_INI + 1;                        /*ERROR ERROR ERROR ERROR ERROR*/
    Ln_Meses := Ln_Meses + 1;
  END LOOP;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 17
Ha aumentado 1 puesto en Oracle (en relación al último mes)
Gráfica de Oracle

LISTAR PERIODOS PARA UN RANGO YYYYMM

Publicado por Alejandro (10 intervenciones) el 24/10/2018 13:13:44
Elvis Muchas gracias por tu aclaración efectivamente los periodos se deben manejar en formato de fecha y no como varchar. Una vez mas agradezco tu ayuda. saludos y bendiciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar