Pular para o conteúdo

Expressão regular no PL/SQL: Como usar essa poderosa ferramenta para manipular strings de forma divertida e eficiente

Expressão regular no PL/SQL: Como usar essa poderosa ferramenta para manipular strings de forma divertida e eficiente

Olá, caro leitor!

Se você está interessado em aprender como usar expressões regulares no PL/SQL, o subconjunto procedural do SQL usado no Oracle Database, você veio ao lugar certo. Neste artigo, vamos mostrar como você pode usar essa poderosa ferramenta para manipular strings de forma divertida e eficiente, usando o Oracle 19c como base.

Mas afinal, o que são expressões regulares? Expressões regulares são padrões que descrevem um conjunto de strings que possuem uma determinada característica em comum. Por exemplo, o padrão ^[A-Z][a-z]+$ descreve todas as strings que começam com uma letra maiúscula e terminam com uma ou mais letras minúsculas. As expressões regulares são compostas por caracteres literais, como A, b, 1, etc., e por metacaracteres, que são símbolos especiais que representam conceitos abstratos, como início, fim, repetição, alternativa, etc. Para saber mais sobre os metacaracteres, veja .

As expressões regulares são muito úteis para realizar tarefas como validar, extrair, substituir ou transformar strings, de forma rápida e precisa. Por exemplo, você pode usar uma expressão regular para verificar se um email é válido, para extrair o nome de um arquivo de um caminho, para substituir todas as ocorrências de uma palavra por outra, ou para converter uma string em maiúsculas ou minúsculas.

No PL/SQL, você pode usar expressões regulares com as seguintes funções:

  • REGEXP_LIKE: retorna verdadeiro se uma string corresponde a uma expressão regular, ou falso caso contrário. Essa função é usada para filtrar dados em uma cláusula WHERE ou HAVING, ou para validar dados em uma restrição CHECK ou em um bloco PL/SQL. Por exemplo:
-- Seleciona os nomes dos clientes que começam com A e terminam com O

SELECT nome FROM clientes WHERE REGEXP_LIKE(nome, '^A.*O$');

-- Cria uma restrição que verifica se o email dos clientes é válido

ALTER TABLE clientes ADD CONSTRAINT email_valido CHECK (REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'));

-- Declara uma variável que armazena um email digitado pelo usuário

DECLARE
  v_email VARCHAR2(50) := '&email';
BEGIN
  -- Verifica se o email é válido e exibe uma mensagem
  IF REGEXP_LIKE(v_email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$') THEN
    DBMS_OUTPUT.PUT_LINE('O email ' || v_email || ' é válido.');
  ELSE
    DBMS_OUTPUT.PUT_LINE('O email ' || v_email || ' é inválido.');
  END IF;
END;
/
  • REGEXP_SUBSTR: retorna uma substring que corresponde a uma expressão regular, a partir de uma string de entrada. Essa função é usada para extrair dados de uma string, de forma flexível e dinâmica. Por exemplo:
-- Retorna o primeiro nome de uma string que contém o nome completo

SELECT REGEXP_SUBSTR('João da Silva', '^[^ ]+') AS primeiro_nome FROM DUAL;

-- Resultado: retorna 'João'

PRIMEIRO_NOME
-------------
João
  • REGEXP_REPLACE: retorna uma string que é o resultado da substituição de todas as ocorrências de uma expressão regular por outra string, em uma string de entrada. Essa função é usada para modificar dados de uma string, de forma simples e poderosa. Por exemplo:
-- Retorna uma string que é o resultado da substituição de todas as vogais por asteriscos, em uma string de entrada

SELECT REGEXP_REPLACE('Expressão regular é muito legal', '[aeiou]', '*') AS resultado FROM DUAL;

-- Resultado: retorna 'Expr*ss** r*g*l*r * m**t* l*g*l'

RESULTADO
-------------------------
Expr*ss** r*g*l*r * m**t* l*g*l
  • REGEXP_INSTR: retorna a posição da primeira ocorrência de uma expressão regular em uma string de entrada, ou zero se não houver nenhuma ocorrência. Essa função é usada para localizar dados em uma string, de forma precisa e eficiente. Por exemplo:
-- Retorna a posição da primeira ocorrência de um número de telefone em uma string de entrada

SELECT REGEXP_INSTR('Meu número é (11) 9999-9999. Ligue-me!', '\([0-9]{2}\) [0-9]{4}-[0-9]{4}') AS posicao FROM DUAL;

-- Resultado: retorna 13

POSICAO
-------
13
  • REGEXP_COUNT: retorna o número de ocorrências de uma expressão regular em uma string de entrada. Essa função é usada para contar dados em uma string, de forma simples e rápida. Por exemplo:
-- Retorna o número de palavras em uma string de entrada

SELECT REGEXP_COUNT('Expressão regular é muito legal', '[^ ]+') AS palavras FROM DUAL;

-- Resultado: retorna 4

PALAVRAS
--------
4

Como podemos ver, as expressões regulares são uma ferramenta poderosa para manipular strings de forma divertida e eficiente, no PL/SQL. As expressões regulares permitem que você descreva padrões que representam um conjunto de strings que possuem uma determinada característica em comum, e que você use esses padrões com funções que realizam tarefas como validar, extrair, substituir, transformar, localizar ou contar strings, de forma rápida e precisa.

Espero que este artigo tenha sido útil e divertido para você. Se você gostou, compartilhe com seus amigos e colegas que também querem aprender mais sobre PL/SQL !

Referências

Natanael Freitas

Natanael Freitas

E aí, pessoal! Sou o Natanael Freitas, o cara que curte desbravar o mundo do PL/SQL. Não sou nenhum expert, mas me viro bem nas linhas de código desse universo. A verdade é que sou mais íntimo de bancos de dados do que de muitas pessoas por aí – sério! Quando não tô quebrando a cabeça com triggers e stored procedures, tô por aí fuçando a web em busca de tudo que é novidade nesse mundão tech. Às vezes, me pego dando uma aula rápida sobre PL/SQL pros colegas, na tentativa de descomplicar essa coisa toda. Meu dia a dia é basicamente sorrisos, café (sim, sou desses que não larga a caneca!) e resolvendo problemas nos códigos. Não sou nenhum Picasso, mas acho que consigo fazer umas artes por aí. Então, se precisar de ajuda com PL/SQL ou só quiser bater um papo sobre o assunto, tamo aí!

Comentário(s) da Comunidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress