La Tabla de Tiempo en Oracle

9 11 2007

Finalmente tuve la oportunidad de hacer el equivalente en Oracle de la tabla de tiempo. Asume que hay autoconversion de caracteres a numeros, si no es así en la base de datos que están usando habría que añadirle el TO_NUMBER antes de cada TO_CHAR para las columnas numéricas.

/*
Tabla de Tiempo en Oracle
Adrián Ceballos
HaciendoCubos.com
*/
CREATE TABLE Tiempo (
       TiempoID         int NOT NULL,
       Fecha            date NOT NULL,
       Año              int NOT NULL,
       MesID            int NOT NULL,
       Mes              varchar2(10) NOT NULL,
       Cuarto           int NOT NULL,
       Semana           int NOT NULL,
       NumDiaSemana     int NOT NULL,
       DiaSemana        varchar2(15) NOT NULL
);
ALTER TABLE Tiempo
       ADD PRIMARY KEY (TiempoID);

Y el llenado de la tabla. Hay que jugar con el TO_CHAR para cambiar el día de la semana. En Bochgoch pueden encontrar una excelente referencia de los formatos usados en el TO_CHAR.

declare
FechaFin date;
Fecha date;
begin

Fecha    := to_date('2000-01-01','yyyy-MM-dd');
FechaFin := to_date('2010-12-31','yyyy-MM-dd');

WHILE Fecha < FechaFin LOOP

     DBMS_OUTPUT.PUT_LINE('Mes: ' || TO_CHAR(Fecha,'YYYYMMDD') );

     INSERT INTO Tiempo
     SELECT
     TO_CHAR(Fecha,'YYYYMMDD') AS TIEMPO_ID,
     Fecha,
     TO_CHAR(Fecha,'YYYY') AS YEAR,
     TO_CHAR(Fecha,'YYYYMM') AS MES_ID,
     TO_CHAR(Fecha,'MON-YY') AS MES,
     TO_CHAR(Fecha,'YYYYQ') AS TRIMESTRE,
     TO_CHAR(Fecha, 'YYYYIW') AS SEMANA,
     TO_CHAR(Fecha,'D'),
     TO_CHAR(Fecha,'DY') AS DIA_SEMANA
     FROM DUAL;
     SELECT Fecha+1 into Fecha from dual;

end loop;

end;

 

Technorati tags: ,

About these ads







Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 29 seguidores