[firebase-br] FB 1.0 e função MOD

Escovador de Bits escovadordebits em gmail.com
Sex Abr 3 04:10:35 -03 2009


Bom dia/tarde HPensador.

Apenas como sugestão, você não necessita executar um SELECT para 
atribuir o resultado dessas expressões para as suas variáveis locais.

Então, o que está como:

  SELECT :ANO - (CAST(:ANO/4 AS INTEGER) * 4) FROM RDB$DATABASE INTO 
:MOD_4;
  SELECT :ANO - (CAST(:ANO/100 AS INTEGER) * 100) FROM RDB$DATABASE INTO 
:MOD_100;
  SELECT :ANO - (CAST(:ANO/400 AS INTEGER) * 400) FROM RDB$DATABASE INTO 
:MOD_400;


Poderia ser:

MOD_4 = ANO - (CAST(ANO/4 AS INTEGER) * 4);
MOD_100 = ANO - (CAST(ANO/100 AS INTEGER) * 100);
MOD_400 = ANO - (CAST(ANO/400 AS INTEGER) * 400);

De qualquer forma, é apenas uma sugestão.

Espero ter ajudado mais que atrapalhado. :D

HPensador escreveu:
> Bom dia Magno!
>
> Obrigado por sua atenção...
> Bem conversando com um colega aqui na empresa acabamos chegando a essa 
> função para o FB 1.0 (testada e funcionando 100%):
>
> CREATE PROCEDURE BISEXTO (
>     ano integer)
> returns (
>     resultado smallint)
> as
> declare variable mod_4 integer;
> declare variable mod_100 integer;
> declare variable mod_400 integer;
> BEGIN
>   SELECT :ANO - (CAST(:ANO/4 AS INTEGER) * 4) FROM RDB$DATABASE INTO 
> :MOD_4;
>   SELECT :ANO - (CAST(:ANO/100 AS INTEGER) * 100) FROM RDB$DATABASE 
> INTO :MOD_100;
>   SELECT :ANO - (CAST(:ANO/400 AS INTEGER) * 400) FROM RDB$DATABASE 
> INTO :MOD_400;
>
>   IF (((:MOD_4 = 0) AND (:MOD_100 <> 0)) OR (:MOD_400 = 0))  THEN
>     RESULTADO = 1;
>   ELSE
>     RESULTADO = 0;
>   SUSPEND;
> END
>
> Pronto... agora se algum colega precisar esta aí prontinha - é só usar.
>




Mais detalhes sobre a lista de discussão lista