¿Cómo detectar si existen?
Es sencillo si contamos con expresiones regulares en SQL como en 10g, pero en 9i igualmente podemos crear una función que recorra cada uno de los caracteres y verifique si pertenece al juego de caracteres 'raros'.
Esta es una sencilla implementación compatible con todas las versiones de Oracle, pero puede considerarse utilizar compilación condicional para utilizar expresiones regulares cuando sea posible.
El código:
CREATE OR REPLACE FUNCTION buscar_no_imprimible(v_cadena VARCHAR2) RETURN BOOLEAN IS v_ret BOOLEAN := FALSE; v_iter NUMBER := 1; v_ascii_min NUMBER := 33; v_ascii_max NUMBER := 126; BEGIN WHILE (v_iter <= LENGTH(v_cadena)) LOOP IF ASCII(SUBSTR(v_cadena,v_iter,1)) NOT BETWEEN v_ascii_min AND v_ascii_max THEN v_ret := TRUE; EXIT; END IF; v_iter := v_iter + 1; END LOOP; RETURN(v_ret); END buscar_no_imprimible;
Esta función booleana retorna TRUE si la cadena contiene un caracter no imprimible, FALSE en caso contrario. Una rápida mirada en una tabla ASCII nos dice que el rango de caracteres válidos se encuentra entre las representaciones decimales 33 y 126.Si se desean considerar caracteres del ASCII extendido (por ejemplo vocales con acentos), bastará ajustar el procedimiento para incluir el conjunto de caracteres deseado.
Fuente: http://oraclenotepad.blogspot.com.es/2008/03/cmo-detectar-caracteres-extraos-o-no.html
No hay comentarios:
Publicar un comentario