Tempo de leitura: menos de 1 minuto
Fala pessoal, como vão?
Vocês já sentiram a necessidade de usar regex para resolver alguma regra de negócio diretamente no Oracle sem ter a necessidade de tratar isso no Java? Eu frequentemente tenho esta necessidade. Muitas vezes carregar o dado para a camada Java apenas para fazer um tratamento em uma coluna pode ser bem custoso e trabalhoso.
Contudo o Oracle nos fornece um conjunto de funções muito úteis para trabalhar com regex, são elas:

- REGEXP_COUNT;
- REGEXP_REPLACE;
- REGEXP_LIKE;
- REGEXP_SUBSTR;
- REGEXP_INSTR;
Destas, as que mais uso são REGEXP_COUNT e REGEXP_REPLACE. Vou fazer um resumo de cada uma delas e dar um exemplo de uso.
REGEXP_COUNT
É usada para contar quantas vezes uma determinada expressão é encontrada no texto. Seu retorno é um number. Quando o retorno é 0 (zero), isto quer dizer que não encontrou a expressão procurada.
Aqui no projeto, muitas tabelas tem uma coluna para registrar críticas no registro, ou seja, avisa ao usuário que o registro tem que ser corrigido. Estas críticas são separada por | (pipe), e em alguns momentos preciso mostrar para o usuário a quantidade de críticas que o registro possui.
Aplicando a função REGEXP_COUNT, fica muito simples mostrar esta informação:
REGEXP_REPLACE
É usada para realizar substituições, adições e remoções de caracteres ou textos não desejado do texto original, esta função é análoga ao método String.replaceAll() do Java, que com certeza você já deve ter usado uma vez na vida… rsrsrs! Ela espera receber três argumentos: texto original, regex procurado e texto de substituição. Vide exemplo:
REGEXP_LIKE
Também é bastante útil, pois é capaz de realizar um filtro tipo LIKE do SQL mas usando regex para isso. Esta função é usada na cláusula WHERE de uma consulta para retornar linhas correspondentes a um regex.
A condição também é válida em uma restrição ou como uma função PL/SQL retornando um booleano. Vide exemplo:
REGEXP_SUBSTR
Usado para obter apenas um “trexo” do texto original. Uso esta função no projeto para realizar tratamentos de exceções Oracle. Alguns exceções trás na mensagem o nome da tabela e até o nome do campos.
Para dar uma mensagem amigável para o usuário, tentamos sempre recuperar o nome da tabela e campo da mensagem ORA original, assim conseguimos mastigar a mensagem:
REGEXP_INSTR
Pesquisa um texto para um determinado regex e retorna um inteiro indicando a posição na string onde a correspondência foi encontrada. Você especifica qual ocorrência deseja encontrar e a posição inicial.
Esta função é semelhante ao String.indexOf() do Java, retornando a posição inicial da ocorrência.
Por hoje é isso, espero que possa ajuda-los.