Il est souvent utile de pouvoir assainir un champ ou une variable dans un bloc PL/SQL ou bien simplement dans une requête. Pour cela, voici une toute petite fonction pouvant être mutualisée dans votre package ‘boîte à outils’.
Cette fonction remplace les caractères ŸÿÝýÜüÙùÛûÚúðߊšŒœÖöÕõØøÒòÔôÓóÑñÏïÌìÎîÍíËëÈèÊêÉéÇçÆæÄäÃãÅåÀàÂâÁá par leurs équivalents YyYyUuUuUuUuossSsOEoeOoOoOoOoOoOoNnIiIiIiIiEeEeEeEeCcAEaeAaAaAaAaAaAa ainsi que les retours chariots et tabulations par des espaces.
Libre à vous de lui fournir en argument un debug pour tracer lors de vos recettes.
CREATE OR REPLACE FUNCTION "SANITIZE" (param$text IN VARCHAR2 , param$debug IN NUMBER)
RETURN VARCHAR2
IS
v_text varchar2(32000) := '';
BEGIN
v_text := param$text;
IF param$debug = 1 THEN
DBMS_OUTPUT.put_line ( 'AVANT => : ' || v_text );
END IF;
v_text := translate( v_text, 'á', 'a');
v_text := translate( v_text, 'Á', 'A');
v_text := translate( v_text, 'â', 'a');
v_text := translate( v_text, 'Â', 'A');
v_text := translate( v_text, 'à', 'a');
v_text := translate( v_text, 'À', 'A');
v_text := translate( v_text, 'å', 'a');
v_text := translate( v_text, 'Å', 'A');
v_text := translate( v_text, 'ã', 'a');
v_text := translate( v_text, 'Ã', 'A');
v_text := translate( v_text, 'ä', 'a');
v_text := translate( v_text, 'Ä', 'A');
v_text := translate( v_text, 'æ', 'ae');
v_text := translate( v_text, 'Æ', 'AE');
v_text := translate( v_text, 'ç', 'c');
v_text := translate( v_text, 'Ç', 'C');
v_text := translate( v_text, 'é', 'e');
v_text := translate( v_text, 'É', 'E');
v_text := translate( v_text, 'ê', 'e');
v_text := translate( v_text, 'Ê', 'E');
v_text := translate( v_text, 'è', 'e');
v_text := translate( v_text, 'È', 'E');
v_text := translate( v_text, 'ë', 'e');
v_text := translate( v_text, 'Ë', 'E');
v_text := translate( v_text, 'í', 'i');
v_text := translate( v_text, 'Í', 'I');
v_text := translate( v_text, 'î', 'i');
v_text := translate( v_text, 'Î', 'I');
v_text := translate( v_text, 'ì', 'i');
v_text := translate( v_text, 'Ì', 'I');
v_text := translate( v_text, 'ï', 'i');
v_text := translate( v_text, 'Ï', 'I');
v_text := translate( v_text, 'ñ', 'n');
v_text := translate( v_text, 'Ñ', 'N');
v_text := translate( v_text, 'ó', 'o');
v_text := translate( v_text, 'Ó', 'O');
v_text := translate( v_text, 'ô', 'o');
v_text := translate( v_text, 'Ô', 'O');
v_text := translate( v_text, 'ò', 'o');
v_text := translate( v_text, 'Ò', 'O');
v_text := translate( v_text, 'ø', 'o');
v_text := translate( v_text, 'Ø', 'O');
v_text := translate( v_text, 'õ', 'o');
v_text := translate( v_text, 'Õ', 'O');
v_text := translate( v_text, 'ö', 'o');
v_text := translate( v_text, 'Ö', 'O');
v_text := translate( v_text, 'œ', 'oe');
v_text := translate( v_text, 'Œ', 'OE');
v_text := translate( v_text, 'š', 's');
v_text := translate( v_text, 'Š', 'S');
v_text := translate( v_text, 'ß', 'ss');
v_text := translate( v_text, 'ð', 'o');
v_text := translate( v_text, 'ú', 'u');
v_text := translate( v_text, 'Ú', 'U');
v_text := translate( v_text, 'û', 'u');
v_text := translate( v_text, 'Û', 'U');
v_text := translate( v_text, 'ù', 'u');
v_text := translate( v_text, 'Ù', 'U');
v_text := translate( v_text, 'ü', 'u');
v_text := translate( v_text, 'Ü', 'U');
v_text := translate( v_text, 'ý', 'y');
v_text := translate( v_text, 'Ý', 'Y');
v_text := translate( v_text, 'ÿ', 'y');
v_text := translate( v_text, 'Ÿ', 'Y');
v_text := translate( v_text, CHR(9), ' ');
v_text := translate( v_text, CHR(10), ' ');
v_text := translate( v_text, CHR(13), ' ');
IF param$debug = 1 THEN
DBMS_OUTPUT.put_line ( 'APRES => : ' || v_text );
END IF;
RETURN v_text;
END;
/