반응형

[규격 참조]

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 여기서 테스트 해볼수 있어요!

반응형

'Database' 카테고리의 다른 글

mysql my session number id  (0) 2019.03.10
CentOS7 MariaDB 설치  (0) 2018.12.19
오라클 용량 산정 참고 쿼리  (0) 2018.12.14
CentOS6 MariaDB 설치  (0) 2018.11.13
oracle Ampersand "&" insert  (0) 2018.10.15
mysql join update  (2) 2018.10.11
oracle merge -> mysql replace or on duplicate key update  (0) 2018.07.25
오라클 임시 테이블  (0) 2018.07.17

+ Recent posts