我需要从v $ sqlarea获取sql_fulltext到xml作为xmlattributes之一,但它会向我抛出ora-00932。那么,有没有办法将CLOB作为属性获得XML(如果CLOB可以编码为base64,对于包含一些XML代码的情况,则更好?)
答案 0 :(得分:1)
使用dbms_lob.substr()
:
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
子句提取它们。