2013-09-30 32 views
1

我在PL/SQL中構建導出以導出有關客戶的數據。 xml被建立在一個臨時表中,並且直到這一點似乎所有東西都可以工作。將xmltype列導出到帶有變音標記的文件中

但是,當xmltype列寫入文件時,我遇到了麻煩。

當我比如有一個名稱,如「Böhomer」,我將其導出到文件中,我看到一些事情發生:

當我與Textpad打開它,似乎一切都很好,我看到了★信

當我像氧氣XML編輯器打開它,我看到Bhomer

當我與Java讀它,我看到Bhmer

我假設文件應該是所有正常可讀其中三種方法和懷疑我做錯了什麼與文件的編碼(雖然正確的數據是在文件中,因爲我可以看到它與文本板,我想我會抱怨客戶,當我送這種XML)

問題是,我有不知道如何正確使用它,甚至不知道正確的編碼是什麼。文件的寫入由UTL_FILE完成。

有趣的事情要注意的是,當我用textpad打開文件並在明確選擇UTF-8編碼時保存它時,它對氧氣XML編輯器和Java變得可讀。我嘗試使用UTL_FILE.FOPEN_NCHAR過程將我的PL/SQL代碼保存爲UTF-8,但這隻給了我像ORA-29298:字符集不匹配的錯誤。

任何想法如何我可以解決這個問題?

我的數據庫字符集爲WE8MSWIN1252

版本中使用: Oracle數據庫11g企業版發佈11.2.0.2.0 - 64位生產 PL/SQL發佈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

我想我可以回答我自己的問題。

我轉載我的問題與下面的代碼:

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; 

通過改變兩個FOPEN和PUT功能(而不是隻有fopen函數就像我剛纔在做的)到NCHAR版本,我得到了一個文件這可以被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; 
相關問題