[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