EXPRESIONES REGULARES EN ORACLE

       Imaginemos que se quiere saber si en un campo VARCHAR2 tiene valores sólo numéricos. Lo primero que se nos ocurre es:

          
                        
FUNCTION esCadenaNumerica( vCadena VARCHAR2 ) RETURN VARCHAR2 IS 
  ------------
  -- Variables
  ------------
  nTonta NUMBER;
BEGIN 
  nTonta := TO_NUMBER( vCadena );
 
  -- Si llego hasta aquí es que el número es válido.
  RETURN 'TRUE';
EXCEPTION
  WHEN VALUE_ERROR THEN
    -- El número no es válido.
    RETURN 'FALSE';
END;
                     
                  

       La función devuelve un varchar para poder ser usada en una select. Esta select me daría los valores no numéricos de una columna:

          
                        
SELECT VVALOR
FROM   TABLA
WHERE  NombrePaquete.esCadenaNumerica( VVALOR ) = 'FALSE'
                     
                  

       Pero si usamos EXPRESIONES REGULARES podemos optimizar el código.

       Podría haber optado por hacer un bloque de pl/sql anónimo, pero he preferido buscar algo más directo y lo he encontrado. Las expresiones regulares están disponibles en la 10g y permiten hacer búsquedas de una manera parecida al like pero más potente. Además de permitir búsquedas, también se pueden hacer potentes replaces y substrs. Por ejemplo, esta select me saca los valores de una columna que no son números enteros:

          
                        
SELECT VVALOR
FROM   TABLA
WHERE  REGEXP_LIKE( VVALOR, '[^0-9]')
                     
                  

      

    Enlaces de interés:
  • Oracle Regular Expressions, versión 10.2
  • Definición de expresión regular.
  • No hay comentarios: