2013-11-11 3 views
0

Я пытаюсь идентифицировать «узел» в XML-строке. У меня нет опыта работы с Oracle XML Functions. Строка XML создается в Stroed Procedure с использованием функций XMLElement и XMLAgg. Как определить значение узла RESULT.NAME?Поиск XML-переменной в хранимой процедуре Oracle

Я объявил переменную в хранимой процедуре и попробовал следующее, но сохраненная процедура не компилируется. Это дает мне ошибку, говоря «Заявление игнорируется» 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> 

ответ

1

В приведенном ниже коде извлекается значение внутри тега. Я не уверен, в чем проблема с вашим кодом, не могли бы вы предоставить больше? Декларация vRepResults и XMLResults переменных, если хотите, и способ 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; 

Выход:

GLUCOSE
+0

Большое спасибо! Сработало преобразование v_xml_str в xmltype. – ERS

Смежные вопросы