[firebase-br] Select retorna campo errado

Adriano dos Santos Fernandes adrianosf em uol.com.br
Qui Ago 28 15:43:07 -03 2008


Alisson escreveu:
> Pessoal..tenho uma procedure no banco de dados que realiza o cálculo da depreciação dos bens da empresa.
> 
> Cada bem tem um grupo ou seja: Tenho uma tabela GRUPOS_BENS e uma tabela BENS, onde a chave da tabela bens é uma conta da tabela GRUPO_BENS e o codigo do bem.
> 
> CREATE TABLE GRUPOS_BENS (
>     CONTA              DOM_CONTA NOT NULL,
>     CONTA_DEPRECIACAO  DOM_CONTA,
>     CONTA_DESPESA      DOM_CONTA,
>     TAXADEPRE          DOM_MONETARIO3,
>     DESCRICAO          DOM_STRING80 COLLATE PT_PT
> );
> 
> CREATE TABLE BENS (
>     CONTA                DOM_CONTA NOT NULL,
>     CODIGO               DOM_CODIGO_BEM NOT NULL,
>     DESCRICAO            DOM_STRING80 COLLATE PT_PT,
>     DESCRICAO_DETALHADA  DOM_BLOB,
>     NOTAFISCAL           DOM_STRING8 COLLATE PT_PT,
>     FORNECEDOR           DOM_STRING30 COLLATE PT_PT,
>     SETOR                DOM_INTEGER,
>     DESCRICAOSETOR       DOM_STRING50 COLLATE PT_PT,
>     DTAQUISICAO          DOM_DATA,
>     VRAQUISICAO          DOM_MONETARIO2,
>     TAXADEPREC           DOM_PERCENTUAL1,
>     CPAQUISICAO          DOM_CONTA,
>     DATABAIXA            DOM_DATA,
>     DEPREAMORT           DOM_TIPO COLLATE PT_PT,
>     FOTO_BEN             BLOB SUB_TYPE 0 SEGMENT SIZE 80,
>     DATA                 DOM_DATAHOJE,
>     VALOR_ATU            DOM_MONETARIO2,
>     DEPRE_ACUM           DOM_MONETARIO2
> );
> 
> 
> em certo momento da procedure faço um for select na tabela de grupos e dentro deste outro FOR SELECT na tabela de bens que retorna somente os bens do que fazem parte do grupo.
> 
>   /* Seleciona Grupos Para cálculo*/
>     for select gb.conta,gb.conta_depreciacao,gb.conta_despesa from grupos_bens gb
>     order by gb.conta into :CONTA_BEM,:CONTA_DEPRE,:CONTA_DESP do begin
> 
>     Depre_Grupo=0;
> 
>       /* Seleciona bens do grupo Para cálculo*/
>       for Select b.codigo,b.taxadeprec,b.depreamort from bens b
>         where (b.databaixa is null) and (b.conta=:CONTA_BEM)
>         and   (( extract (year from b.dtaquisicao))<=:Ano)
>         or (( ( extract (month from b.dtaquisicao))<=:mes) and (( extract (year from b.dtaquisicao))=:Ano ))
>         order by b.codigo  into :aux2,:TX,:tipo do
> 
> 
> acontece que em alguns casos o for select dos bens retorna bens de um outro grupo. 
> por exemplo: a variável CONTA_BEM é '13201001' e ele traz 3 bens que pertencem a outro grupo, que no caso em questão é '13202003'.
> 
> 
> alguem sabe por que isso está acontecendo??!
> 
Verifique os parênteses... Está caindo do lado direito do OR.


Adriano





Mais detalhes sobre a lista de discussão lista