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!
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?
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.