Criar tabela com regexp
Seguindo a mesma linha de raciocínio da postagem sobre o cpf, vou exemplificar uma maneira prática de criar uma tabela com uma coluna UF que aceita somente duas letras.
Criando a tabela:
SQL
CREATE TABLE T1 (
C1 VARCHAR(2) NOT NULL
CONSTRAINT C1_UF_FORMAT
CHECK(REGEXP_LIKE(C1 '[A-Z]{2}', 'c'))
);
Parâmetros utilizados:
SQL
C1 ...: coluna da tabela
[A-Z] : cadeia de caracteres válidos (A a Z)
{2} ..: quantidade exata de caracteres
c ....: indica que a expressão é case sensitive
Como anteriormente, o número especificado entre chaves indica a quantidade exata de caracteres que serão aceitos. A novidade está na utilização de uma lista de caracteres disponíveis definidos entre colchetes.
Teste:
SQL
-- dados válidos
insert into t1 values ('DF');
1 row created.
insert into t1 values ('RO');
1 row created.
insert into t1 values ('PR');
1 row created.
-- dados inválidos
insert into t1 values ('df');
*
ERROR at line 1:
ORA-02290: check constraint (C1_UF_FORMAT) violated
insert into t1 values ('r');
*
ERROR at line 1:
ORA-02290: check constraint (C1_UF_FORMAT) violated
insert into t1 values ('P ');
*
ERROR at line 1:
ORA-02290: check constraint (C1_UF_FORMAT) violated
Outro exemplo prático da aplicabilidade de regexp em Oracle.
[]s