2013-09-30 31 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; 
相关问题