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: Oracle, data warehouse


Comentarios recientes