[firebase-br] Collate e Character Set
Edson T. Marques
marques em oriontec.com.br
Qui Jan 20 16:00:48 -03 2005
Pha-Lista escreveu:
>5) select * from PAIS where NOME collate WIN_PTBR = 'ALEMANHA'
> Resultado: Retornou o registro referente a Alemanha e estabeleceu
>automaticamente o seguinte PLAN:
> PLAN: (PAIS NATURAL)
>
>6) select * from PAIS where Upper(NOME) = 'ALEMANHA' plan (PAIS index
>(RDB$PRIMARY92))
> Resultado: Erro na consulta: "o PLAN não pode ser usado para essa
>consulta"
>
>7) select * from PAIS where NOME collate WIN_PTBR = 'ALEMANHA' plan
>(PAIS index (RDB$PRIMARY92))
> Resultado: Erro na consulta: "o PLAN não pode ser usado para essa
>consulta"
>
>Se você criar o campo com o collate WIN_PTBR, o indice será utilizado.
>
>Da forma como você fez, está convertendo os dados entre os Collate, dessa forma o indice não é utilizado, é como se você estivesse utilizando um função, o principio é o mesmo.
>
>Faço o teste:
>
>1) Crie um novo campo.
>
>ALTER TABLE TABELA
>ADD NOME2 COLLATE WIN_PTBR;
>
>2) Copie os dados do campo NOME para NOME2
>
>3) Crie um indice para o campo NOME2
>
>4) Refaça os testes, e nos passe o resultado
>
Fiz isso que foi pedido: (Usando o IBExpert)
1) criei o campo:
alter table PAIS add YYYY VARCHAR(50) collate win_ptbr;
create index ie_Pais_YYYY on PAIS (YYYY);
update PAIS set YYYY = NOME;
2) "Comitei" tudo.
3) Para testar: fiz uma consulta assim:
select * from PAIS where YYYY = 'Alemanha'.
O resultado foi OK e o PLAN usado foi PLAN (PAIS INDEX (ie_Pais_YYYY)).
4) Fiz, então, a consulta:
select * from PAIS where YYYY collate win_ptbr = 'ALEMANHA'
E o resultado foi o segunte:
a) A consulta foi executada sem problemas.
b) O retorno foi o registro referente à Alemanha (cito que o campo YYYY
para o registro tinha o valor 'Alemanha')
c) O PLAN automaticamente calculado foi PLAN (PAIS NATURAL).
Só se eu fiz algo errado ou meus programas estão malucos, mas eu repetí
isso duas vezes e o resultado foi o mesmo.
O Indice não está sendo usado para a consulta. Ou, se está sendo, não é
isso que aparece no Rodapé do SQL Editor do IBExpert.
Poderia ser isso?
Edson.
Mais detalhes sobre a lista de discussão lista