如何将CLOB作为属性获取到XML中

时间:2016-03-16 10:37:06

标签: sql oracle plsql

我需要从v $ sqlarea获取sql_fulltext到xml作为xmlattributes之一,但它会向我抛出ora-00932。那么,有没有办法将CLOB作为属性获得XML(如果CLOB可以编码为base64,对于包含一些XML代码的情况,则更好?)

1 个答案:

答案 0 :(得分:1)

使用dbms_lob.substr()

最多可以获得4000个字符的SQL文本
SELECT xmlagg(xmlelement ("S",
  xmlattributes(dbms_lob.substr(s.sql_fulltext, 4000, 1) AS "FT"))) xml_ret
FROM v$sqlarea s;

属性值is escaped by default,因此小于号的符号将显示为<

如果您需要超过4000个字符(或字节)的SQL文本,那么您可以使用the dbms_xmlgen package

您还可以将数据提取为XML元素(允许CLOB),然后使用XQuery通过XPath构造函数将元素转换为属性:

select x.xml_ret
from (
  select xmlelement("S", xmlelement("FT", sql_fulltext)) as x
  from v$sqlarea
) s
cross join xmltable('for $i in /S
  return element S{attribute FT {$i/FT/text()} }'
  passing s.x
  columns xml_ret xmltype path '.'
) x;

您可以在内联视图中添加其他属性或元素,并使用其他columns子句提取它们。