quinta-feira, 25 de setembro de 2014

StormUDF - UDF para Tratamento de Acentos no Firebird

Lendo hoje meus emails recebi uma mensagem de um rapaz que me questionou sobre o funcionamento de uma UDF chamada StormUDF que criei ha algum tempo. Para quem não sabe, uma UDF (User Defined Function, Função Definida pelo Usuário) é uma função, criada em uma linguagem qualquer (C/C++, Pascal, etc) para auxiliar na realização de algumas rotinas do banco de dados. Ao trabalhar com Firebird em suas primeiras versões (1.5 e anteriores), sentia a necessidade de uma busca mais abrangente, que não levasse e consideração os acentos, nem se a palavra estava escrita em maiúsculas ou minúsculas. Criar uma Stored Procedure seria uma opção, porém, fiquei preocupado com o desempenho e, aproveitando de outras situações, resolvi criar uma UDF que me auxiliaria nessa situação, nascendo assim a StormUDF. Um arquivo de UDF's pode conter várias funções, mas nesse caso específico, deixei apenas uma função, chamada TrataAcentos. O funcionamento dela é simples: joga todos os caracteres para maiúsculos, e remove os acentos dos mesmos (Ã vira A, É vira E, e assim por diante). E a vantagem, poderia ser usado seu valor para a  criação de índices, agilizando as buscas. Para fazer o download da UDF basta acessar o site do Firebase. Após realizar o download, copie a DLL para a pasta UDF na instalação do Firebird (por exemplo C:\Program Files\Firebird\Firebird_2_0\UDF). Logo depois, registre a UDF em seu banco de dados:

DECLARE EXTERNAL FUNCTION TRATAACENTOS 
CSTRING(254) CHARACTER SET NONE 
RETURNS CSTRING(254) 
ENTRY_POINT 'TrataAcentos' MODULE_NAME 'StormUDF' 

Logo após ter registrado a UDF, já é possível utilizá-la:

SELECT * FROM tabela WHERE TrataAcentos(NOME) = 'JOSE'; --Acha José, jose, JÓSE, etc 
SELECT * FROM tabela WHERE TrataAcentos(NOME) like 'MACA%'; --Acha Maçã, MACA, macarrão, etc

Claro que hoje no Firebird temos algumas formas de realizar essa busca utilizando-se de recursos nativos, mas de qualquer forma, talvez possa ajudar alguém, e como dizem, "Recordar é Viver".
Bem, é isso!

Nenhum comentário:

Postar um comentário

Adicione seu comentário. O mesmo será moderado antes de sua publicação.