查询从xml中提取值

时间:2011-03-10 14:41:26

标签: mysql sql oracle

我将xml存储在db中,想要从文本后面提取某些部分,完成查询。 进入xml我有很多查询,然后想要提取。 我们有一些方法可以做到吗。

例如:提取查询而不是值,xml嵌入到db中,格式如下所示。 文字= “QUERY1” 文字= “QUERY2” text =“query3”

1 个答案:

答案 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;