Oracle SQL * Loader获取CDATA值

时间:2009-03-26 11:33:10

标签: sql xml oracle loader sql-loader

有人知道怎么做吗?我知道有一种更好的方法可以在不使用SQL * Loader的情况下将XML数据加载到Oracle,但我只是很好奇如何使用它来完成它。我已经有一个可以将XML数据加载到数据库的代码,但是,如果XML文件的值包含CDATA,它就不会运行...

以下是控制文件代码,如果值不是CDATA,则可以使用

LOAD DATA  
INFILE FRATS.xml "str '</ROW>'"  
APPEND  
INTO TABLE "FRATERNITIES"  
(  
    DUMMY FILLER TERMINATED BY "<ROW>",  
    THE_CODE SEQUENCE (MAX, 1),  
    DUMMY2 FILLER TERMINATED BY "</COLUMN>",  
    STORE_NN_KJ ENCLOSED BY '<COLUMN NAME="THE_NAME">' AND '</COLUMN>',  
    STAFF_COUNT ENCLOSED BY '<COLUMN NAME="THE_COUNT">' AND '</COLUMN>'  
)

这是XML文件:
<?xml version='1.0' encoding='MS932' ?>
<RESULTS>
<ROW>
<COLUMN NAME="THE_CODE">777</COLUMN>
<COLUMN NAME="THE_NAME">CharlieOscarDelta</COLUMN>
<COLUMN NAME="THE_COUNT">24</COLUMN>
</ROW>
</RESULTS>

这是带有CDATA值的XML文件。我的控制文件不能与它一起运行......:
<?xml version='1.0' encoding='MS932' ?>
<RESULTS>
<ROW>
<COLUMN NAME="THE_CODE"><![CDATA[777]]></COLUMN>
<COLUMN NAME="THE_NAME"><![CDATA[CharlieOscarDelta]]></COLUMN>
<COLUMN NAME="THE_COUNT"><![CDATA[24]]></COLUMN>
</ROW>
</RESULTS>

1 个答案:

答案 0 :(得分:0)

你试过吗

STORE_NN_KJ "substr(substr(:STORE_NN_KJ,instr(:STORE_NN_KJ,'<![CDATA[')+9),0,instr(substr(:STORE_NN_KJ,instr(:STORE_NN_KJ,'<![CDATA[')+9),']]>'))" ENCLOSED BY '<COLUMN NAME="THE_NAME">' AND '</COLUMN>'

修改的 看起来我忘了a)..试试这个..