Procedure não preenche tabela Tempo (MYSQL)

5 respostas Resolvido
bancomysql
I

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 = `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 ;

5 Respostas

javaflex

Sem falar qual problema fica mais difícil. Debuga e informe o problema pontualmente.

I

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

javaflex

Mesmo sem mensagem de erro, debuga a procedure para saber o ponto exato onde a rotina começa a não se comportar como esperado.

I

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.

I
Solucao aceita

Consegui resolver, o problema eram as aspas do insert, troquei as aspas e funcionou.

Criado 26 de março de 2018
Ultima resposta 29 de mar. de 2018
Respostas 5
Participantes 2