以下允许我解析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标注错误" *原因:执行指定的标注导致错误。 *操作:检查错误消息是否采取适当的措施。
答案 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
参数。