sql >> Database teknologi >  >> RDS >> Oracle

Hvordan vælger man et bestemt nodenavn og dets værdier i XML ved hjælp af Oracle SQL-forespørgsel?

Du kan konvertere din CLOB til en XMLType, forudsat at den er gyldig, bare med:

extractvalue(XMLType(RESPONSE_XML), ...

Ikke sikker på, hvorfor din kolonnetype ikke er XMLType, hvis du gemmer XML i den, men det er ikke helt relevant.

Du kan derefter angive navneområdet til extractvalue() :

SELECT extractvalue(XMLType(RESPONSE_XML),
  '//ax2130:id/text()',
  'xmlns:ax2130="http://core.data.soap.CDRator.com/xsd"')
FROM SOAP_MONITORING
where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder';

.. men du har flere id'er, så du får:ORA-19025: EXTRACTVALUE returns value of only one node .

Og extractvalue er forældet, som angivet i dokumentationen

Du kan bruge XQuery i stedet, specifikt her en XML-tabel.

Forudsat at du kun vil have ax2130:id værdier indlejret i ax2147:subscription , kan du bruge denne XQuery:

SELECT xt.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
      'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",
      'http://service.soap.CDRator.com' as "ns",
      'http://core.data.soap.CDRator.com/xsd' as "ax2130",
      'http://webshop.result.service.soap.CDRator.com/xsd' as "ax2147"
    ),
    'for $i in /soapenv:Envelope/soapenv:Body/ns:placeShopOrderResponse/ns:return/ax2147:subscriptions
      return $i/ax2130:id'
    passing XMLType(sm.RESPONSE_XML)
    columns "ID" number path '/') xt
where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder';

                   ID
---------------------
   201501070917439804 
   201501070917439804 

 2 rows selected 

Eller hvis du vil have nogen ax:2130 node hvor som helst, inklusive den tomme, kan du bruge:

SELECT xt.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
      'http://core.data.soap.CDRator.com/xsd' as "ax2130"
    ),
    'for $i in //ax2130:id return $i'
    passing XMLType(sm.RESPONSE_XML)
    columns "ID" number path '/') xt
where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder';

                   ID
---------------------

   201501070917439804 
   201501070917439804 

 3 rows selected 

Kun de navneområder, der henvises til i XQuery, skal angives i XMLNamespaces-sætningen.

Du kan deltage i et andet bord baseret på de valgte ID'er, hvis du har brug for at:

SELECT xt.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
    ...) xt
JOIN someothertable sot on sot.id = xt.id
where sm.WEB_SERVICE_NAME='RatorWebShopService'
and sm.WEB_METHOD_NAME='placeShopOrder';


  1. Initialiseringsafsnit af pakken

  2. Type Mismatch:Kan ikke konvertere fra int til ResultSet

  3. Django Postgresql dropper kolonnestandarder ved migrering

  4. MySQL dato og klokkeslæt funktioner eksisterer ikke