Criar tabelas utilizando regexp
Uma pequena palavra sobre espressões regulares
Expressões regulares é um assunto novo em Oracle, mas bastante utilizado em linux. Como um amigo me disse, uma boa definição para expressão regular é: “expressões regulares estão para as letras como as operações matemáticas estão para os números”. Essa frase define bem o que a expressão regular representa e a abrangência do assunto.
Regexp em Oracle
Encontrei vários assuntos sobre regexp e uma boa documentação que nos auxilia na compreensão deste assunto. Portanto vou demonstrar na prática algumas aplicações que podemos usar no Oracle.
Validar campo utilizando regexp_like
Neste exemplo, vou criar uma tabela qualquer e demonstrar como é possível controlar a entrada de dados utilizando regexp_like.
Para melhorar a compreensão, vou utilizar um campo varchar2 com o objetivo de preencher o número do cpf. Para tanto precisamos controlar a entrada para que contenha somente onze números.
Criando a tabela:
CREATE TABLE T1 (
C1 VARCHAR2(11) NOT NULL
CONSTRAINT C1_NUMBER_FORMAT
CHECK(REGEXP_LIKE(C1, '\d{11}'))
);
Parâmetros utilizados:
C1 ..: coluna da tabela
\d ..: indica somente números
{11} : quantidade exata de caracteres
Utilizando estes parâmetros, forçamos a utilização de números e na quantidade exata de onze, não menos.
Teste:
-- dados válidos
insert into t1 values ('01234567800');
1 row created.
insert into t1 values ('12345678911');
1 row created.
insert into t1 values ('12345678922');
1 row created.
-- dados inválidos
insert into t1 values ('1234567811');
*
ERROR at line 1:
ORA-02290: check constraint (C1_NUMBER_FORMAT) violated
insert into t1 values ('123456789XX');
*
ERROR at line 1:
ORA-02290: check constraint (C1_NUMBER_FORMAT) violated
Este foi um pequeno exemplo prático da utilização de regexp_like na criação de uma tabela. Inúmeras variações podem ser criadas.
Pretendo postar exemplos práticos para melhorar o entendimento da aplicabilidade desta função.
Mandem sugestões para criarmos mais dicas como esta.
[]s