sql >> Databasteknik >  >> RDS >> Oracle

Extraherar värde från xml clob med Namespace med Oracle pl/sql

Din uppdaterade XML har ett namnområde, som äntligen avslöjar problemet. Du måste specificera namnutrymme som en del av XML-extraktionen , vilket är enklare med XMLTable-metoden; i det här fallet kan du bara behandla det som standardnamnutrymmet:

select itc.element_name, x.user_classification3
from i_transaction itc
cross join xmltable(
  xmlnamespaces(default 'http://xmlns.oracle.com/apps/otm'),
    '/TenderOffer/Shipment/RATE_OFFERING/RATE_OFFERING_ROW'
  passing xmltype(itc.xml_blob)
  columns user_classification3 varchar2(10) path 'USER_CLASSIFICATION3'
) x
where itc.i_transaction_no = 31553115
and rownum = 1;

ELEMENT_NA USER_CLASS
---------- ----------
dummy      ZXF       

eller med XMLQuery:

select itc.element_name, xmlquery(
  'declare default element namespace "http://xmlns.oracle.com/apps/otm"; (: :)
    /TenderOffer/Shipment/RATE_OFFERING/RATE_OFFERING_ROW/USER_CLASSIFICATION3/text()'
  passing xmltype(itc.xml_blob)
  returning content
) x
from i_transaction itc
where itc.i_transaction_no = 31553115
and rownum = 1;

ELEMENT_NA X                                                                               
---------- --------------------------------------------------------------------------------
dummy      ZXF                                                                             

Om du ville fortsätta använda den föråldrade extractvalue() funktionen kan du ange namnutrymmet som ett argument till det också, återigen som visas i dokumentationen :

select itc.element_name,
  extractvalue(xmltype(xml_blob),
    '/TenderOffer/Shipment/RATE_OFFERING/RATE_OFFERING_ROW/USER_CLASSIFICATION3/text()',
    'xmlns="http://xmlns.oracle.com/apps/otm"')
from i_transaction itc where itc.i_transaction_no = 31553115 and rownum = 1;


  1. Funktion för att få antal veckodagar mellan två datum exklusive helgdagar

  2. Hitta/söka efter saknade värden i MySQL

  3. MySQL ger ett okänt kolumn 'user.id' i 'field list'-fel med Djangos automatiska id

  4. Uppdatera flera kolumner från underfrågan