У меня есть xml, хранящийся в db, вы хотите извлечь определенные части из них, например, после текста, полного запроса. В xml у меня есть много запросов и вы хотите их также извлечь. У нас есть какой-то метод для этого.
например: извлечь запрос не значение, xml встроен в db и имеет формат, как показано ниже. текст = "Query1" текст = "Query2" text = "query3"
Вам нужно пойти на некоторые исследования использования Oracle XMLTYPE, но вот быстрая функция из пакета, в котором я сейчас работаю, показывает использование .existsnode для проверки наличия node и .extract to вытащить информацию
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;