Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Parse SOAP XML w Oracle z przykładem

Możesz wyodrębnić zawartość węzła za pomocą XMLQUERY :

select xmlquery('declare namespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
      declare namespace urn = "urn:ABC";
      /soapenv:Envelope/soapenv:Body/urn:settleResponse/settleReturn/message/text()'
    passing XMLType(message)
    returning content) as message,
  xmlquery('declare namespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
      declare namespace urn = "urn:ABC";
      /soapenv:Envelope/soapenv:Body/urn:settleResponse/settleReturn/errorCode/text()'
    passing XMLType(message)
    returning content) as errorCode,
  xmlquery('declare namespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
      declare namespace urn = "urn:ABC";
      /soapenv:Envelope/soapenv:Body/urn:settleResponse/settleReturn/status/text()'
    passing XMLType(message)
    returning content) as status
from external;

MESSAGE              ERRORCODE            STATUS   
-------------------- -------------------- ----------
Missing first name   INVALID_ACC          Failed

A może prościej, szczególnie jeśli masz do obsłużenia wiele wiadomości, za pomocą XMLTABLE :

select x.*
from external ext
cross join xmltable(
  xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as  "soapenv",
    'urn:ABC' as "urn"),
  '/soapenv:Envelope/soapenv:Body/urn:settleResponse/settleReturn'
  passing XMLType(ext.message)
  columns message varchar2(20) path 'message',
    errorCode varchar2(20) path 'errorCode',
    status varchar2(10) path 'status'
) x;

MESSAGE              ERRORCODE            STATUS   
-------------------- -------------------- ----------
Missing first name   INVALID_ACC          Failed    

W obu przypadkach musisz określić przestrzenie nazw, a składnia jest inna. Przeczytaj więcej o korzystaniu z tych funkcji .

Możesz wstawić je bezpośrednio do innej tabeli za pomocą insert into some_table (x, y, z) select ... .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORACLE SQL wybierz odrębne, nie usuwając duplikatów

  2. Obracanie danych za pomocą dwóch kolumn

  3. Porównanie daty z sysdate w Oracle

  4. Uzyskaj konkretną liczbę wartości kolumny w Oracle z wewnętrznym sprzężeniem

  5. Identyfikator wyroczni hibernacji jest za długi ORA-00972