¿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'.
Mostraré 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)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.
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;
Si se desean considerar caracteres del ASCII extendido (por ejemplo vocales con acentos), bastará ajustar el procedimiento para incluir el conjunto de caracteres deseado.
Ver también:
Como eliminar acentos del español
Limpiando código DDL
Compilación condicional en 9i
No hay comentarios:
Publicar un comentario