Remplacer les caracteres accentues dans une chaine de carractere (PL/SQL / Oracle / Fonction)
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; /