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!