Professional Documents
Culture Documents
-- Create table
create table TD_TEMPO
(
CO_SEQ_TEMPO NUMBER not null,
DT_DATA DATE,
CO_DIA NUMBER,
CO_DIA_SEMANA NUMBER,
DS_DIA_SEMANA VARCHAR2(15),
CO_MES NUMBER,
DS_MES VARCHAR2(10),
CO_MES_ANO NUMBER,
DS_MES_ANO VARCHAR2(8),
CO_BIMESTRE NUMBER,
DS_BIMESTRE VARCHAR2(11),
CO_TRIMESTRE NUMBER,
DS_TRIMESTRE VARCHAR2(12),
CO_ESTACAO NUMBER,
DS_ESTACAO VARCHAR2(9),
CO_SEMESTRE NUMBER,
DS_SEMESTRE VARCHAR2(11),
CO_ANO NUMBER,
CO_MES_ANT NUMBER,
DS_MES_ANT VARCHAR2(8),
CO_MES_ANO_ANT NUMBER,
DS_MES_ANO_ANT VARCHAR2(8),
CO_ANO_ANT NUMBER
)
tablespace <ALTERAR> -- Utilize seu tablespace
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table TD_TEMPO
add constraint PK_TD_TEMPO primary key (CO_SEQ_TEMPO)
using index
tablespace <ALTERAR> -- Utilize seu tablespace
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
/
CREATE OR REPLACE PROCEDURE PROC_CARGA_TEMPO(DATA_INICIAL IN DATE, DATA_FINAL IN DATE) AS
/*======================================================================================
AUTOR: FRANKLIN NASCIMENTO
DATA: 19/05/2011
DESCRIÇÃO: * PROCEDURE QUE CARREGA TABELA DE DIMENSÃO TEMPO PARA FINS DE DATA WHAREHOUSE
* INSERE DATA INFORMADA NO PARÂMETRO INICIAL ATÉ DATA FINAL INCLUSIVE
* CASO EXISTA REGISTROS A DATA_INICIAL É DESCONCIDERADA E UTILIZA-SE A ULTIMA
DATA REGISTRADA.
* CASO SEJA INSERIDA UMA DATA_FINAL MENOR QUE A DATA_INICIAL NENHUM REGISTRO
É INSERIDO, ASSIM COMO A DATA FINAL SEJA MENOR QUE A ULTIMA DATA REGISTRADA
BEGIN
MES_CORRENTE := TO_NUMBER(TO_CHAR(DATA_CORRENTE,'MM'));
DIA_CORRENTE := TO_NUMBER(TO_CHAR(DATA_CORRENTE,'DD'));
TO_NUMBER(TO_CHAR(ADD_MONTHS(DATA_CORRENTE,-1),'YYYYMM')), --CO_MES_ANT
TO_CHAR(ADD_MONTHS(DATA_CORRENTE,-1),'MON YYYY'), --DS_MES_ANT
TO_NUMBER(TO_CHAR(ADD_MONTHS(DATA_CORRENTE,-12),'YYYYMM')),--CO_MES_ANO_ANT,
TO_CHAR(ADD_MONTHS(DATA_CORRENTE,-12),'MON YYYY'), --DS_MES_ANO_ANT
TO_NUMBER(TO_CHAR(ADD_MONTHS(DATA_CORRENTE,-12),'YYYY')) --CO_ANO_ANT
);
DATA_CORRENTE := DATA_CORRENTE + 1;
END LOOP;
COMMIT;
END;
begin
-- Call the procedure
proc_carga_tempo(data_inicial => '01/01/1900',
data_final => '31/12/2112');
end;