使用PL SQL提取基于属性的XML

使用PL SQL提取基于属性的XML,xml,oracle,plsql,Xml,Oracle,Plsql,我有一些属性XML文件,它以CLOB格式存储在DB中。clob柱的长度从200到9000不等。因为xmltype不能直接使用CLOB,所以我必须将CLOB转换为字符串,然后将其传递到xmltype。除此之外还有别的选择吗?因为当clob转换为字符串时,它最多可以容纳4000个字符,并且XML没有正确解析,所以我不确定您使用的是哪个db版本-我已经在10、11和12上进行了尝试。它与clob配合使用效果很好。这是我的例子 create table some_table(num_col number

我有一些属性XML文件,它以CLOB格式存储在DB中。clob柱的长度从200到9000不等。因为xmltype不能直接使用CLOB,所以我必须将CLOB转换为字符串,然后将其传递到xmltype。除此之外还有别的选择吗?因为当clob转换为字符串时,它最多可以容纳4000个字符,并且XML没有正确解析,所以我不确定您使用的是哪个db版本-我已经在10、11和12上进行了尝试。它与clob配合使用效果很好。这是我的例子

create table some_table(num_col number, clob_col clob);

declare 
  clob_var clob := to_clob('... a long long clob ...'); -- works smoothly without "to_clob" as well
begin
  insert into some_table values(1, clob_var);
end;
我使用了来自 那么,查询

SELECT XMLTYPE(t.clob_col).EXTRACT('//book/genre').getStringVal()
  FROM some_table t;
给了我以下信息

<genre>Computer</genre>
<genre>Fantasy</genre>
<genre>Fantasy</genre>
<genre>Fantasy</genre>
<genre>Fantasy</genre>
<genre>Romance</genre>
<genre>Romance</genre>
<genre>Horror</genre>
<genre>Science Fiction</genre>
<genre>Computer</genre>
<genre>Computer</genre>
<genre>Computer</genre>
计算机
幻想
幻想
幻想
幻想
浪漫
浪漫
恐怖
科幻小说
电脑类
电脑类
电脑类
因此,我认为您应该让xmltype尝试处理clob数据,因为它似乎可以很好地处理该类型的数据