Database
oracle - replace xml invalid character 오라클 XML 사용제한 문자 치환
고.니
2018. 10. 18. 23:30
반응형
[규격 참조]
https://www.w3.org/TR/xml11/#charsets
[2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F] |
위의 규격을 참조하여 XML에서 사용할 수 없는 문자열을 오라클에서 치환하는 쿼리 입니다.
SELECT regexp_replace('123?</>abABCDㄱㄴㄷㄹ한글!@#$%^&*()-=_+`~ㅁㄴㅁㄴ98ㅛasd9vh.. ', '['|| chr(1) || '-' || chr(8) || chr(11) || '-' || chr(12) || chr(14) || '-' || chr(31) || chr(134) || '-' || chr(159) || chr(127) || chr(128) || chr(129) || chr(130) || chr(131) || chr(132) || ']' , '뷁') FROM dual; |
[결과]
123?</>abABCDㄱㄴㄷㄹ한글!@#$%^&*()-=_+`~ㅁㄴㅁㄴ98ㅛasd9vh..뷁뷁뷁뷁뷁뷁뷁뷁 뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁뷁 뷁 |
* 특수문자가 저장이 안되네요. 쿼리상에 들어간 특수 문자 헥사코드 값입니다.( [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F] )
01 02 03 04 05 06 07 08 0B 0C 0E 0F 10 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 7F 80 81 82 83 84 86 87 88 89 90 9A 9B 9C 9D 9E 9F |
* 아래 쿼리로 테스트하는게 더 정확하겠네요.
select regexp_replace( (select listagg(c, ',') within group (order by c) c from ( select chr(level) c, level from Dual connect by Level <=8 union select chr(level+10) c, level+10 from Dual connect by Level <=2 union select chr(level+13) c, level+13 from Dual connect by Level <=18 union select chr(level+133) c, level+133 from Dual connect by Level <=26 union select chr(level+126) c, level+126 from Dual connect by Level <=6) a ), '['|| chr(1) || '-' || chr(8) || chr(11) || '-' || chr(12) || chr(14) || '-' || chr(31) || chr(134) || '-' || chr(159) || chr(127) || chr(128) || chr(129) || chr(130) || chr(131) || chr(132) || ']' , '뷁') from dual a; |
http://sqlfiddle.com/#!4/b62beb/243 여기서 테스트 해볼수 있어요!
반응형