Clipper On Line • Ver Tópico - Erro de hoje no MySQL - erro do programador

Erro de hoje no MySQL - erro do programador

Discussão sobre SQL

Moderador: Moderadores

 

Erro de hoje no MySQL - erro do programador

Mensagempor JoséQuintas » 09 Out 2021 18:49

FUNCTION ze_ContabilDiario( nMes INT(11) )

BEGIN

DECLARE nMes INT(11);


A função recebe o parâmetro nMes, ao mesmo tempo que cria a variável nMes.
NÃO tem mensagem de erro na criação da função, mas.... com certeza a rotina usa a variável declarada e não o parâmetro.

Tava brigando com isto, até coloquei pra retornar as variáveis, como opção de debug:

CREATE PROCEDURE ze_ContabilDiario( nOpcMes INT(11) )

BEGIN

DECLARE dInicial, dFinal, dFechamento DATE;
DECLARE nAno, nMes, nFecha INT(11);

SELECT EMANOBASE FROM JPEMPRESA WHERE IDEMPRESA = 1
   INTO nAno;

SELECT EMFECHA FROM JPEMPRESA WHERE IDEMPRESA = 1
   INTO nFecha;

SET dInicial := CONCAT( LPAD( nAno, 4, '0' ), '-01-01' );
SET dInicial := DATE_ADD( dInicial, INTERVAL nOpcMes - 1 MONTH );
SET dFinal   := LAST_DAY( dInicial );

SET nAno := YEAR( dInicial );
SET nMes := MONTH( dInicial );
SET nMes := FLOOR( ( nMes - 1 ) / nFecha ) * nFecha;
IF nMes = 0 THEN
   SET dFechamento := CONCAT( LPAD( nAno - 1, 4, '0' ), '-12-31' );
ELSE
   SET dFechamento := CONCAT( LPAD( nAno, 4, '0' ), '-', LPAD( nMes, 2, '0' ), '-01' );
END IF;
SET dFechamento := LAST_DAY( dFechamento );

SELECT nOpcMes, dInicial, dFinal, nAno, nMes, dFechamento;

/* bloqueei o resto */

END


contabil.png


O ano base é 2013, e o fechamento é anual.
Se o usuário escolher o mês 95, equivale a 11/2020.
O fechamento é 12 meses, anual, então o último fechamento oficial foi em dezembro/2019.
Ainda na dúvida, se nas procedures/functions uso o número ou a data.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Erro de hoje no MySQL - erro do programador

Mensagempor JoséQuintas » 10 Out 2021 20:04

[mysqld-5.5.5-10.6.3-MariaDB]Incorrect date value: '20190132' for column ``.``.`dInicial` at row 70


Mais outro erro do programador, que vai ser comum....
Campo DATE + 1, resultou em 32 de janeiro de 2019.

errado: nDate + 1 , retorna um número.
correto: DATE_ADD( nDate, INTERVAL 1 DAY )

Isso é interessante, porque de certa forma, para o MySQL tudo é letra ou número ou data ou qualquer coisa.
O tipo do resultado depende sempre da operação que está sendo feita.

Mas é uma coisa que a gente vai confundir muito.
Não dá erro na operação, só no uso do resultado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro