Estou tentando carregar a tabela dimensão tempo através de uma procedure, mas não funciona.
Segue procedure
DELIMITER $$
USE `dw_bi_web`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `carga_dim_tempo`()
BEGIN
declare data_inicio date;
declare data_fim date;
declare valor_data date;
SET data_inicio = `1970-01-01`; #data antiga de referência
SET data_fim = CURDATE(); # pega data de hoje do sistema
SET valor_data = data_inicio;
WHILE valor_data < data_fim DO
INSERT INTO dim_tempo(
´sk_tempo´,
´data´,
´dia´,
´num_mes´,
´nome_mes´,
´ano´,
´ano_mes´,
´num_dia_semana´, #domingo=1 ...sábado=7
´nome_dia_semana´, #domingo, segunda...
´dia_ano´, #dia no ano '2017-02-03' = 34
´semana_ano´, #('2008-12-31',1) -> 53
´semestre´,
´bimestre´,
´trimestre´,
´quadrimestre´
) VALUES (
CAST(DATE_FORMAT(valor_data, '%Y-%m-%d') AS UNSIGNED),
valor_data,
DAY(valor_data),
MONTH(valor_data),
MONTHNAME(valor_data), #colocar em port
YEAR(valor_data),
CAST(DATE_FORMAT(valor_data, '%Y-%m') AS UNSIGNED),
DAYOFWEEK(valor_data),
DAYNAME(valor_data), #colocar em port
DAYOFYEAR(valor_data),
WEEKOFYEAR(valor_data),
FLOOR(1 + (month(valor_data) - 1) / 6), #semestre
FLOOR(1 + (month(valor_data) - 1) / 2), #bimestre
QUARTER(valor_data), #trimestre
FLOOR(1 + (month(valor_data) - 1) / 4) #quadrimestre
);
SET valor_data = DATE_ADD(valor_data, INTERVAL 1 DAY); #incrementa mais um dia a cada data
END WHILE;
END$$
DELIMITER ;
Exato, não dá nenhum erro! Ele roda esse script acima com sucesso, mas quando faço um select na tabela dim tempo, não há registros.
Agora quando eu faço call carga_dim_tempo(); ele dá erro 1054 unknown field sk_tempo
Desculpa a demora! Debuggando, mas dá o mesmo erro que dá quando chamo a função.
Erro 1054 SQLState 42S22 Message: unknow column “sk_tempo” in field list
Só que essa coluna existe… sendo que na minha tabela esse campo receberá o valor:
CAST(DATE_FORMAT(valor_data, ‘%Y%m%d’) AS UNSIGNED ao invés de ser auto incrementado.