2013-09-30 2 views
1

저는 고객에 대한 데이터를 내보내려면 PL/SQL에서 내보내기를 작성하고 있습니다. xml은 임시 테이블에 빌드되며 그 시점까지는 모든 것이 파일로 작동하는 것처럼 보입니다.xmltype 열을 분음 부호가있는 파일로 내 보냅니다.

그러나 xmltype 열을 파일에 쓸 때 문제가 발생합니다. 내가 예를 들어 'Böhomer'같은 이름을 가지고 있고, 나는 파일로 내보낼 때

, 나는 몇 가지 일이 일어나고 참조 :

내가 TextPad를 함께 열어

, 모든 좋은 것, 그리고 내가 볼 나는 산소 같은 XML 편집기로 열면 ö 문자

, 나는 Bhomer

내가 자바를 읽고, 내가

Bhmer

참조 I 파일 모두에 의해 제대로 읽을 수 있어야 가정 참조 이 세 가지 방법 중 내가 잘못한 것을 용의치가있다. 파일의 인코딩 (올바른 데이터가 파일에 있지만 텍스트 패드로 볼 수 있기 때문에이 종류의 XML을 보낼 때 고객에게 불만을 제기 함)

문제는 올바른 방법을 알지 못하거나 올바른 인코딩이 무엇인지 모릅니다. 파일 작성은 UTL_FILE에 의해 수행됩니다.

주목할 점은 텍스트 패드로 파일을 열고 명시 적으로 UTF-8 인코딩을 선택하는 동안 저장하면 산소 XML 편집기와 Java에서 읽을 수있게됩니다. 내 PL/SQL 코드를 UTF-8로 저장하려고했는데, UTL_FILE.FOPEN_NCHAR 프로 시저를 사용했지만 ORA-29298 : Character set mismatch와 같은 에러 만 받았다.

어떤 아이디어로이 문제를 해결할 수 있습니까?

내 데이터베이스 문자 집합을 사용 WE8MSWIN1252

버전입니다 : - 64 비트 생산 PL/SQL 릴리스 11.2.0.2.0 - 오라클 데이터베이스 11g 엔터프라이즈 에디션 출시 11.2.0.2.0 생산 CORE 11.2.0.2 .0 생산 64 비트 Windows 용 TNS : 버전 11.2.0.2.0 - 생산 NLSRTL 버전 11.2.0.2.0 - 생산

답변

2

나는 내 자신의 질문에 대답 할 수 있다고 생각합니다.

내가 다음 코드를 사용하여 내 문제 재현 : 모두 FOPEN을 변경하여

DECLARE 
    outputxml XMLTYPE; 

    fileName VARCHAR2 (100) := 'testfile.xml'; 
    dir   VARCHAR2 (100) := 'XML_OUTPUT_DIR'; 
    fHandler UTL_FILE.FILE_TYPE; 
    xmlclob  CLOB; 
BEGIN 
    --Create some XML 
    SELECT XMLELEMENT ("name", 'Böhmer') INTO outputxml FROM DUAL; 

    --Transform it into a clob 
    xmlclob := outputxml.getclobval(); 

    --Open a file and write the clob and close it 
    fHandler := UTL_FILE.FOPEN (dir, fileName, 'W'); 
    UTL_FILE.PUT (fHandler, xmlclob); 
    UTL_FILE.FCLOSE (fHandler); 
END; 

을하고 NCHAR 버전으로 (대신에 내가 이전에했던 것처럼 만 FOPEN 기능) 기능을 PUT, 나는 파일을 가지고 Oxygen XML 편집기와 Java 모두에서 읽을 수있었습니다. NCHAR 함수와

샘플 프로그램 :

DECLARE 
    outputxml XMLTYPE; 

    fileName VARCHAR2 (100) := 'testfile.xml'; 
    dir   VARCHAR2 (100) := 'XML_OUTPUT_DIR'; 
    fHandler UTL_FILE.FILE_TYPE; 
    xmlclob  CLOB; 
BEGIN 
    --Create some XML 
    SELECT XMLELEMENT ("name", 'Böhmer') INTO outputxml FROM DUAL; 

    --Transform it into a clob 
    xmlclob := outputxml.getclobval(); 

    --Open a file and write the clob and close it 
    fHandler := UTL_FILE.FOPEN_NCHAR (dir, fileName, 'W'); 
    UTL_FILE.PUT_NCHAR (fHandler, xmlclob); 
    UTL_FILE.FCLOSE (fHandler); 
END; 
관련 문제