GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

Funções úteis: replace + regexp_like

Dias atrás precisei fazer uma limpeza e tive que  usar um workaround (mais conhecido como “tapa na base”  rs)  na tabela de “telefone de clientes”. Eu usei um c[odigo simples para resolver o problema e só vou postá-lo aqui(críticas a parte),porque vira e mexe no grupo Oracle_Br aparece alguém que necessita da mesma coisa,não foi diferente neste começo de mês,e as vezes não vem uma luz ou a pessoa realmente não sabe o que fazer.

Fiz assim::

SQL> SELECT * FROM MYTEL;

MYTEL_DDD MYTEL_NUMBER
--------- ------------------------------
11 1234-6655
11 3331-9999
11 3215-8947
11 3331-9999

SQL>

Acima podemos ver que minha tabela tem o carácter ‘-‘ entre os números de telefones.

Vamos ver se funciona:

SQL> SELECT * FROM mytel
2  WHERE REGEXP_LIKE(mytel_number ,'-') ;

MYTEL_DDD MYTEL_NUMBER
--------- ------------------------------
11 1234-6655
11 3331-9999
11 3215-8947
11 3331-9999

SQL>

Na cláusula where eu fiz a restrição aos casos em que ocorrem a existência de ‘-‘.

Abaixo eu usei o REPLACE para excluir o carácter ‘-‘  e:

SQL> SELECT mytel_ddd,REPLACE(MYTEL_NUMBER,'-','')
2  FROM mytel
3  WHERE REGEXP_LIKE(mytel_number ,'-') ;

MYTEL_DDD REPLACE(MYTEL_NUMBER,'-','')
--------- ------------------------------
11 12346655
11 33319999
11 32158947
11 33319999

SQL>

Ok.Pronto? Quase.Vamos ao update:

SQL> UPDATE mytel
2  SET mytel_number = REPLACE(mytel_number,'-','')
3  WHERE REGEXP_LIKE(mytel_number ,'-') ;

4 rows updated

SQL>

Agora sim!

SQL> SELECT * FROM mytel
2  WHERE REGEXP_LIKE(mytel_number ,'-') ;

MYTEL_DDD MYTEL_NUMBER
--------- ------------------------------

SQL>

Nenhuma linha retornada.

E ,

SQL> SELECT * FROM mytel;

MYTEL_DDD MYTEL_NUMBER
--------- ------------------------------
11 12346655
11 33319999
11 32158947
11 33319999

SQL>

Tapa na base executado!

Lembrando que as expressões regulares como REGEXP_LIKE tem recursos muitos interessantes,compensa consultar a documentação de dar uma olhada!No meu caso pdoeria ter usado o LIKE,mas dependendo da procura que você necessite terá que usar expressões regulares,disponíveis a partir do Oracle 10g.

Criticas e sugestões,estou a disposição!

Share

You may also like...

2 Responses

  1. Clayton Festa disse:

    Olá, tenho o Oracle9i Release 9.2.0.4.0 e ele funciona com expressões regulares, quer dizer, deveria. A base de desenvolvimento e a de produção são exatamente iguais, entretanto as expressões só funcionam em desenvolvimento, quando tento executar na produção aparece o erro: 00904. 00000 – “%s: invalid identifier”. Será que existe algum privilégio específico ou alguma coisa assim que justifique funcionar num e noutro não?

  2. jccorrea disse:

    pelo erro parece que sim.Parece que ele não está enchergando algum objeto.Verifica cada objeto se é possivel fazer um select em cima das tabelas.Se fosse versões diferentes do SW poderiamso dizer q está usando uma função que nao existe na outra versão.Mas se são iguais.Então deveria funcionar sim.

Deixe um comentário

O seu endereço de e-mail não será publicado.