Usando Expressão regular em Check Constraint, 10g e superior

https://ict-pulse.com/2024/07/g5nfsffrby2 A um tempo atras tive que criar algumas check’s para bloquear palavras de um campo, hoje no lugar das dezenas de checks constraints que criei troquei todas por uma unica. Vou dar um exemplo simples mostrando como funciona e a expressao regular ajudou nesta questão. Exemplo: Bloquear o campo titulo da tabela gn_globo para que não receba referencias exatas da concorrencia nesta. A primeira idéia foi utilizar a função instr e minha check:

https://bxscco.com/gqg9a88a ALTER TABLE gn_globo ADD constraint glb_titulo_ban_sbt_ck CHECK ( instr(lower(titulo), 'sbt') = 0 ); ALTER TABLE gn_globo ADD constraint glb_titulo_ban_record_ck CHECK ( instr(lower(titulo), 'record') = 0); ALTER TABLE gn_globo ADD constraint glb_titulo_ban_redetv_ck CHECK ( instr(lower(titulo), 'redetv') = 0 ); SQL> INSERT INTO gn_globo VALUES (1,'TEste de Texto'); 1 row created. SQL> INSERT INTO gn_globo VALUES (2,'Teste do Sbt reporter'); INSERT INTO gn_globo VALUES (2,'Teste do Sbt reporter') * ERROR at line 1: ORA-02290: CHECK constraint (RAFA.GLB_TITULO_BAN_SBT_CK) violated SQL> INSERT INTO gn_globo VALUES (3,'Teste do reCord reporter'); INSERT INTO gn_globo VALUES (3,'Teste do reCord reporter') * ERROR at line 1: ORA-02290: CHECK constraint (RAFA.GLB_TITULO_BAN_RECORD_CK) violated SQL> INSERT INTO gn_globo VALUES (4,'Teste do RedeTV reporter'); INSERT INTO gn_globo VALUES (4,'Teste do RedeTV reporter') * ERROR at line 1: ORA-02290: CHECK constraint (RAFA.GLB_TITULO_BAN_REDETV_CK) violated SQL> INSERT INTO gn_globo VALUES (5,'Teste do gn_globo reporter'); 1 row created.

follow site Ahhhh legal, assim tenho também como controlar a cada check.
Mas acabei encontrando uma forma melhor para construi-las e com muito mais elegante:

https://autismwish.org/fkfg5x26h  

source url ALTER TABLE gn_globo DROP constraint glb_titulo_ban_sbt_ck; ALTER TABLE gn_globo DROP constraint glb_titulo_ban_record_ck; ALTER TABLE gn_globo DROP constraint glb_titulo_ban_redetv_ck; ALTER TABLE gn_globo ADD constraint glb_titulo_ban_ck CHECK ( NOT REGEXP_LIKE(titulo,'(sbt)|(record)|(redetv)' ,'i'));

https://www.insearchofsukoon.com/e5v07357  

https://etbscreenwriting.com/mdl9htvebc Assim tenho as 3 regras anteriores em uma unica regra simples e prática, utilizando expressão regular. Ref. REGEXP_LIKE Oracle Database Implementation of Regular Expressions

%name Usando Expressão regular em Check Constraint, 10g e superior

Autor: Rafael Stoever

see

https://hymnsandhome.com/2024/07/25/2ew0fuz7meg https://www.techonicsltd.com/uncategorized/luin7b35 Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte follow link a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, https://gsaudemarketing.com.br/in950bzm OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).