我将xml存储在db中,想要从文本后面提取某些部分,完成查询。 进入xml我有很多查询,然后想要提取。 我们有一些方法可以做到吗。
例如:提取查询而不是值,xml嵌入到db中,格式如下所示。 文字= “QUERY1” 文字= “QUERY2” text =“query3”
答案 0 :(得分:0)
你需要对Oracle XMLTYPE的用法做一些研究,但是这里有一个快速的函数来自我目前正在处理的包,它显示了使用.existsnode来验证节点是否在那里,而.extract来拉取信息
FUNCTION parse_order_by_xml (p_xml_document IN XMLTYPE) RETURN varchar2
IS
/*** xml document structure *** start
<?xml version="1.0"?>
<OrderByClause>
<OrderBy>
<ColumnName>ELECTOR_ID</ColumnName>
<Order>Asc</Order>
</OrderBy>
<OrderBy>
<ColumnName>CREATED_TS</ColumnName>
<Order>Desc</Order>
</OrderBy>
</OrderByClause>
*** xml document structure *** end ***/
l_order_by_string varchar2(3000) := 'ORDER BY ';
l_index number;
BEGIN
l_index := 1;
WHILE (p_xml_document.existsnode('/OrderByClause/OrderBy[' || to_char(l_index) || ']') = 1) LOOP
l_order_by_string := l_order_by_string
|| p_xml_document.extract('/OrderByClause/OrderBy[' || to_char(l_index) || ']/ColumnName/text()').getStringVal()
|| ' '
|| p_xml_document.extract('/OrderByClause/OrderBy[' || to_char(l_index) || ']/Order/text()').getStringVal()
|| ',';
l_index := l_index + 1;
END LOOP;
l_order_by_string := REGEXP_REPLACE(l_order_by_string, ',$');
RETURN l_order_by_string;
END parse_order_by_xml;