PCDATA(Parsed Character DATA)란 XML 파서에 의해 분석될 문자 데이터를 의미합니다.
간단히 말해 XML 요소의 시작 태그와 종료 태그 사이에 위치한 텍스트를 PCDATA라고 생각하면 됩니다.
출처 : http://tcpschool.com/xml/xml_dtd_component
DB에서 데이터를 불러와 사용할 때 PCDATA Invalid Char value Error가 발생하는 경우가 있습니다.
"PCDATA Invalid Char value 26 Error" 케이스를 Oracle DB에서 해결하는 쿼리 아래에 남기겠습니다.
WITH TEST_TABLE AS
(
SELECT
'문자열 확인' || CHR(26) || CHR(10) || 'LINE FEED (줄바꿈 적용)' AS TEST_STRING
FROM DUAL
)
-- 원본
SELECT
'원본' AS 구분
, TEST_STRING AS 결과
FROM TEST_TABLE
/* CASE 1 : REPLACE 적용 */
UNION ALL
SELECT
'CASE 1 : REPLACE' AS 구분
, REPLACE(TEST_STRING, CHR(26), '') AS 결과
FROM TEST_TABLE
/* CASE 2 : TRANSLATE 적용 */
-- TRANSLATE는 변환문자에 ''를 사용할 수 없음
UNION ALL
SELECT
'CASE 2 : TRANSLATE' AS 구분
, TRANSLATE(TEST_STRING, ' '||CHR(26)||CHR(10), ' ') AS 결과
FROM TEST_TABLE;
출력 결과
# 원본
"문자열 확인
LINE FEED (줄바꿈 적용)"
# Case 1 : chr26(SUB) 제거
"문자열 확인
LINE FEED (줄바꿈 적용)"
# Case 2 : chr26(SUB) 및 chr10(줄바꿈) 제거
문자열 확인LINE FEED (줄바꿈 적용)
기타 궁금하신 사항은 댓글 남겨주세요.
감사합니다.
참고자료
1. 젠트님 블로그, [Oracle] 오라클 TRANSLATE 함수 사용법, https://gent.tistory.com/232
2. Stack overflow, [Oracle REPLACE() function isn't handling carriage-returns & line-feeds] , https://stackoverflow.com/questions/407027/oracle-replace-function-isnt-handling-carriage-returns-line-feeds
3. 크빗님 블로그, [아스키 복슴 겸 아스키 표 제작], https://ddwroom.tistory.com/50#footnote_link_50_1
[OS] 동시성(Concurrency) vs 병렬성(Parallelism) (0) | 2021.10.07 |
---|---|
[R] dataframe 컬럼명 변경하는방법 2가지 (1) | 2021.07.25 |
[R] dataframe 사용자 지정 정렬하기 (0) | 2021.07.25 |
[R] mapvalues로 데이터 매핑하기, 데이터 변경하기 (0) | 2021.07.24 |
[JAVA] JDK, JRE 차이 (Java JDK, JRE 란?) (0) | 2021.05.23 |