Mysql 从xml中提取值的查询

Mysql 从xml中提取值的查询,mysql,sql,oracle,Mysql,Sql,Oracle,我将xml存储在数据库中,希望从中提取某些部分,如文本后的部分,完整的查询。 在xml中,我有许多查询,然后也希望提取这些查询。 我们有什么办法吗 例如:提取查询而不是值,xml嵌入到数据库中,格式如下。 text=“query1” text=“query2” text=“query3”您需要对Oracle XMLTYPE的用法进行一些研究,但我目前正在使用的一个包中有一个快速函数,它显示了使用.existsnode来验证节点是否存在,以及使用.extract来提取信息 FUNCTION par

我将xml存储在数据库中,希望从中提取某些部分,如文本后的部分,完整的查询。 在xml中,我有许多查询,然后也希望提取这些查询。 我们有什么办法吗

例如:提取查询而不是值,xml嵌入到数据库中,格式如下。 text=“query1” text=“query2”
text=“query3”

您需要对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;
函数parse_order_by_xml(xml类型的p_xml_文档)返回varchar2
是
/***xml文档结构***开始
选民身份证
Asc
创建
描述
***xml文档结构***结束***/
l_order_by_string varchar2(3000):=“order by”;
l_指数;
开始
l_指数:=1;
WHILE(p_xml_document.existsnode('/OrderByClause/OrderBy['| | to_char(l|index)| |']')=1)循环
l_order_by_string:=l_order_by_string
||p_xml_document.extract('/OrderByClause/OrderBy['| | | to_char(l| | |')]/ColumnName/text()).getStringVal()
||  ' '
||p_xml_document.extract('/OrderByClause/OrderBy['| | | to_char(l| | |')]/Order/text()).getStringVal()
||  ',';
l_指数:=l_指数+1;
端环;
l_order_by_string:=REGEXP_REPLACE(l_order_by_string,,$);
按字符串返回订单;
通过xml结束对顺序的解析;

我不知道您想问什么。您正在使用哪些RDBMS?MySQL还是Oracle?神谕者拥有这两个,但它们仍然截然不同:)