[firebase-br] RES: Select retorna campo errado

Alisson alisson em ecosbr.com
Sex Ago 29 11:36:08 -03 2008


Era isso mesmo pessoal.. muito obrigado!

Incrível como eu não consegi perceber isso antes.
Obrigado!


----- Original Message ----- 
From: "Marco Antonio" <marcobolacha em vicoldobrasil.com.br>
To: "'FireBase'" <lista em firebase.com.br>
Sent: Thursday, August 28, 2008 6:54 PM
Subject: [firebase-br] RES: Select retorna campo errado


Repare que ele so esta filtranto o CONTA_BEM acima do traço.
Ele esta fazendo duas comparações e aceitando (OR) qualquer condicao. A de
baixo ou a de cima do traço atende.

         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 ))


         where (b.databaixa is null) and (b.conta=:CONTA_BEM)
         and ( /* este e */
         (( extract (year from b.dtaquisicao))<=:Ano)
         or (( ( extract (month from b.dtaquisicao))<=:mes) and (( extract
(year from b.dtaquisicao))=:Ano ))
              ) /*este */ une qualquer uma das opcoes (OR) com o CONTA_BEM




Marco Antonio
Gerência Informática
(  (35) 3821.5009
e-mail: marco.castro em vicoldobrasil.com.br


P Antes de imprimir pense em sua responsabilidade e compromisso com o MEIO
AMBIENTE
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Adriano dos Santos Fernandes
Enviada em: quinta-feira, 28 de agosto de 2008 15:43
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Select retorna campo errado

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


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa



-- 
No virus found in this incoming message.
Checked by AVG.
Version: 7.5.524 / Virus Database: 270.6.13/1641 - Release Date: 29/08/2008 
07:07






Mais detalhes sobre a lista de discussão lista