【问题标题】:Search XML Variable in an Oracle Stored Procedure在 Oracle 存储过程中搜索 XML 变量
【发布时间】:2013-11-11 22:57:26
【问题描述】:

我正在尝试识别 XML 字符串中的“节点”。我对 Oracle XML 函数没有任何经验。 XML 字符串是在 Stroed 过程中使用 XMLElement 和 XMLAgg 函数生成的。如何识别节点 RESULT.NAME 的值?

我已经在存储过程中声明了一个变量,并尝试了以下方法,但存储过程无法编译。它给了我一个错误,说“语句被忽略” vRepResults := XMLResults.EXTRACT('ZAVACOR_RESULTS/ORDERS/SAMPLE/TEST/RESULT/REPORTED_RESULT/text()').getstringval();

此字符串存储在变量中,而不是表中,因此我不确定是否可以使用 XQuery 函数。我在下面粘贴了示例 XML:

<ZAVACOR_RESULTS>
    <ORDERS>
        <X_EXTERNAL_ID>508106</X_EXTERNAL_ID>
        <X_ZAV_PROTOCOL></X_ZAV_PROTOCOL>
        <SAMPLE>
            <LABEL_ID>352453611</LABEL_ID>
            <STATUS>I</STATUS>
            <TEST>
                <ANALYSIS>_GLUCOSE_SO1_ENZ_001</ANALYSIS>
                <STATUS>I</STATUS>
                <RESULT>
                    <NAME>GLUCOSE</NAME>
                    <REPORTED_RESULT>
                        <REPORTED_VALUE>3</REPORTED_VALUE>
                    </REPORTED_RESULT>
                </RESULT> 
            </TEST>
        </SAMPLE>
        </ORDERS>
</ZAVACOR_RESULTS> 

【问题讨论】:

    标签: oracle stored-procedures


    【解决方案1】:

    下面的代码提取标签内的值。我不确定你的代码有什么问题,你能提供更多吗? vRepResultsXMLResults 变量的声明,如果你愿意的话,以及 XMLResults 的创建方式。

    DECLARE
      v_name VARCHAR2(200);
      v_xml_str VARCHAR2(2000);
    BEGIN
      v_xml_str := 
      '<ZAVACOR_RESULTS>
        <ORDERS>
            <X_EXTERNAL_ID>508106</X_EXTERNAL_ID>
            <X_ZAV_PROTOCOL></X_ZAV_PROTOCOL>
            <SAMPLE>
                <LABEL_ID>352453611</LABEL_ID>
                <STATUS>I</STATUS>
                <TEST>
                    <ANALYSIS>_GLUCOSE_SO1_ENZ_001</ANALYSIS>
                    <STATUS>I</STATUS>
                    <RESULT>
                        <NAME>GLUCOSE</NAME>
                        <REPORTED_RESULT>
                            <REPORTED_VALUE>3</REPORTED_VALUE>
                        </REPORTED_RESULT>
                    </RESULT> 
                </TEST>
            </SAMPLE>
        </ORDERS>
      </ZAVACOR_RESULTS>';
    
      v_name := xmltype(v_xml_str).extract('/ZAVACOR_RESULTS/ORDERS/SAMPLE/TEST/RESULT/NAME/text()').getStringVal();
    
      dbms_output.put_line(v_name);
    END;
    

    输出:

    葡萄糖

    【讨论】:

    • 非常感谢!将 v_xml_str 转换回 xmltype 有效。
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多