[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