[firebase-br] Comportamento Estranho em Banco de Dados

Carlos H. Cantu listas em warmboot.com.br
Sexta Setembro 24 11:55:44 -03 2021


Teria que ver o PLAN dos dois selects quando estava com problema, e o
resultado do gfix.

Se o campo CODIGOMESTRE for indexado, provavelmente o indice estava
corrompido e ao ser usado pela pesquisa não encontrava o registro.
Quando vc dava o cast, o indice deixava de ser usado, então o registro
era encontrado.

Acredito que seja isso que aconteceu.

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 4 - www.firebase.com.br/guiafb4.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

VDvl> Bom dia,

VDvl> Algo muito estranho acontecendo em um BD de cliente.
VDvl> Na tabela VENDAMESTRE temos o campo CODIGOMESTRE, do tipo *integer, not
VDvl> null.*

VDvl> Ao fazer um select dos registros filtrando por esse campo como integer,
VDvl> retorna vazio.
VDvl> Porém, se fizer um cast, aí traz o registro.

VDvl> Desta forma o select retorna vazio:
VDvl> /SELECT * FROM VENDAMESTRE WHERE CODIGOMESTRE = 184857/

VDvl> Desta forma retorna com o registro
VDvl> /SELECT * FROM VENDAMESTRE WHERE CAST(CODIGOMESTRE AS VARCHAR(6)) = 
VDvl> '184857'/

VDvl> Obs.: rotinas acima foram executadas via IBExpert.
VDvl> Firebird 2.5

VDvl> Fiz um backup/restore com GBak e resolveu.
VDvl> Ao que parece, o conteúdo do campo ficou como se fosse um varchar ao ser
VDvl> gravado o registro. Mas nenhum erro foi apresentado na aplicação.
VDvl> Mas a questão é: como isso pode ter ocorrido?
VDvl> E o mais importante? Que mecanismos posso criar no sistema para impedir
VDvl> que isso ocorra?

VDvl> Obrigado!
VDvl> Cordialmente  Financeiro

VDvl> ------------------------------------------------------------------------
VDvl> /Cordialmente
VDvl> Valdir Dill
VDvl> /






Mais detalhes sobre a lista de discussão lista