如何简单加载CLOB

时间:2018-04-16 20:45:02

标签: xml oracle11g clob

以下允许我解析XML文件,但我想知道如何简化语法以不需要clob_pointer.txt文件并直接指定xml。我尝试了位置(XMLDIR:' XYZ.XML')但是没有用。

DROP TABLE EXT_CLOB_TABLE;
CREATE TABLE EXT_CLOB_TABLE
(
    CLOB_CONTENT CLOB
)
ORGANIZATION EXTERNAL
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY XMLDIR
    ACCESS PARAMETERS
(
FIELDS TERMINATED BY ','
(
  CLOB_POINTER CHAR(200)
)
COLUMN TRANSFORMS (CLOB_CONTENT FROM LOBFILE(CLOB_POINTER) FROM (XMLDIR) 
CLOB)
)
   LOCATION('clob_pointer.txt')
);


CREATE OR REPLACE VIEW ext_xml_view
AS
SELECT xmltype(CLOB_CONTENT) xml FROM ext_clob_table;  

SELECT * FROM ext_xml_view;

我尝试将位置更改为:

location(XMLDIR:'XYZ.XML')

但是得到以下错误;

  

ORA-29913:执行ODCIEXTTABLEFETCH标注ORA-29400时出错:   数据盒带错误打开文件错误   /u01/oracle/product/11.2.0.4/db/rdbms/xml/   29913. 00000 - "执行%s标注错误"   *原因:执行指定的标注导致错误。   *操作:检查错误消息是否采取适当的措施。

1 个答案:

答案 0 :(得分:0)

假设您的XML文件名为clob_pointer.txt,那么您可以使用(某些内容)

select
    xmltype(
        xmlData => bfilename('XMLDIR', 'clob_pointer.txt'),
        csid => nls_charset_id('AL32UTF8')
    )
from dual;

sys.xmltype有一个构造函数接受bfile定位器。当然,因为它无法知道文件中使用的字符集,因为在这种情况下它是Oracle的二进制文件,所以还必须将字符集标识符提供给csid参数。