Ir ao conteúdo
  • Cadastre-se

MySQL Procedure não preenche tabela Tempo


Ir à solução Resolvido por Erciley Junior,

Posts recomendados

Olá!

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 = `01/01/1970`; #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 ;

Alguém consegue enxergar o erro? valeu!

Link para o comentário
Compartilhar em outros sites

  • Solução
Em 26/03/2018 às 14:27, Isador disse:

SET data_inicio = `01/01/1970`; #data antiga de referência

 

Olá. Seu erro provavelmente está aqui.

 

O certo seria

 

SET data_inicio = '1970-01-01'; #data antiga de referência

Não testei nem nada, mas batendo o olho rápido seria isso.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!