2015-04-07 3 views
0

Мне нужно извлечь данные BATCH_ID из таблицы FND_SOA_BODY_PIECE и ТЕЛА Column (тип данных: CLOB), который имеет данные XML в немИзвлечение данных из XML (типа CLOB)

<?xml version="1.0" encoding="UTF-8"?>   
     <SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
     <SOAP-ENV:Header> 
     </SOAP-ENV:Header> 
     <SOAP-ENV:Body> 
      <tns1:InputParameters xmlns:tns1="http://xmlns.oracle.com/apps/gl/soaprovider/plsql/geas_gl_journal_pkg/geas_get_gl_data/"> 
        <tns1:P_BATCH_TBL> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85380</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85345</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85364</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85356</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85374</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85358</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
        </tns1:P_BATCH_TBL> 
      </tns1:InputParameters> 
     </SOAP-ENV:Body> 
    </SOAP-ENV:Envelope> 

Я попытался это ниже, но это просто дал мне нулевые значения

SELECT xmltype(fsa.body).EXTRACT('/Envelope/Body/InputParameters/P_BATCH_TBL/P_BATCH_TBL_ITEM/BATCH_ID').getStringVal() FROM fnd_soa_body_piece; 

Не мог бы кто-нибудь помочь в этом?

ответ

0

Прежде всего, пожалуйста, отправьте действующий XML, поскольку то, что вы показываете, выглядит как очистка экрана от браузера и отсутствует конечный тег и имеет недопустимые символы. Если ваш xml имеет ссылки на пространство имен, тогда вам нужно включить их в XPath и как параметр функции extract(). Вот пример:

with fnd_soa_body_piece as (
select xmltype(
     '<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
     <SOAP-ENV:Header> 
     <SOAP-ENV:Body> 
      <tns1:InputParameters xmlns:tns1="http://xmlns.oracle.com/apps/gl/soaprovider/plsql/geas_gl_journal_pkg/geas_get_gl_data/"> 
        <tns1:P_BATCH_TBL> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85380</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85345</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85364</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85356</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85374</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85358</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
        </tns1:P_BATCH_TBL> 
      </tns1:InputParameters> 
     </SOAP-ENV:Body> 
     </SOAP-ENV:Header> 
    </SOAP-ENV:Envelope>') body from dual 
    ) 
    select extract(body,'/SOAP-ENV:Envelope/SOAP-ENV:Header/SOAP-ENV:Body/tns1:InputParameters/tns1:P_BATCH_TBL/tns1:P_BATCH_TBL_ITEM/tns1:BATCH_ID', 
    ' xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
     xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:tns1="http://xmlns.oracle.com/apps/gl/soaprovider/plsql/geas_gl_journal_pkg/geas_get_gl_data/"').getStringVal() 
    from fnd_soa_body_piece 

Update:

Для возврата результатов в виде набора SQL строки, необходимо использовать функцию XMLTABLE, такие как:

with fnd_soa_body_piece as (
select xmltype(
     '<?xml version="1.0" encoding="UTF-8"?> 
     <SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
     <SOAP-ENV:Header> 
     <SOAP-ENV:Body> 
      <tns1:InputParameters xmlns:tns1="http://xmlns.oracle.com/apps/gl/soaprovider/plsql/geas_gl_journal_pkg/geas_get_gl_data/"> 
        <tns1:P_BATCH_TBL> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85380</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85345</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85364</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85356</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85374</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
         <tns1:P_BATCH_TBL_ITEM> 
           <tns1:BATCH_ID>85358</tns1:BATCH_ID> 
         </tns1:P_BATCH_TBL_ITEM> 
        </tns1:P_BATCH_TBL> 
      </tns1:InputParameters> 
     </SOAP-ENV:Body> 
     </SOAP-ENV:Header> 
    </SOAP-ENV:Envelope>') body from dual 
    ) 
    select t.batch_id 
    from fnd_soa_body_piece, 
    xmltable(xmlnamespaces(
       'http://schemas.xmlsoap.org/soap/encoding/' as "SOAP-ENC", 
       'http://schemas.xmlsoap.org/soap/envelope/' as "SOAP-ENV", 
       'http://xmlns.oracle.com/apps/gl/soaprovider/plsql/geas_gl_journal_pkg/geas_get_gl_data/' as "tns1"), 
       '/SOAP-ENV:Envelope/SOAP-ENV:Header/SOAP-ENV:Body/tns1:InputParameters/tns1:P_BATCH_TBL/tns1:P_BATCH_TBL_ITEM/tns1:BATCH_ID' 
       passing fnd_soa_body_piece.body columns batch_id number(10) PATH 'text()') t 
+0

Спасибо за пост! ! 1. Он работает только в том случае, если у меня нет первой строки xml '' В данных xml. Как мне это обработать? и во-вторых, это возвращает значение в формате xml с тегами batch_id. Как я могу просто получить данные в одиночку? –

+0

Вот что выглядит результат Пример: ' 85380 85345 ' –

+0

см. обновление в ответ. У меня нет проблем с инструкцией по обработке XML. – OldProgrammer

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