sql >> Databáze >  >> RDS >> Oracle

Oracle 12c XML získá hodnotu z odpovědi

můžete proveďte to pomocí extractvalue :

select extractvalue(
  xmltype(response_string), 
  '/soap:Envelope/soap:Body/getAddressForIpResponse/p-address',
  'xmlns="urn:USR1" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"')
from dual;

ale extractvalue je zastaralé ; takže byste měli použít XMLQuery :

select XMLQuery(
  'declare default element namespace "urn:USR1";
   declare namespace soap="http://schemas.xmlsoap.org/soap/envelope/";
   /soap:Envelope/soap:Body/getAddressForIpResponse/p-address/text()'
  passing xmltype(response_string)
  returning content).getStringval()
from dual;

V obou případech musíte zadat výchozí hodnotu a soap jmenné prostory.

db<>fiddle

Můžete také použít XMLTable, pokud extrahujete více bitů dat; tady to moc nepřidá, ale bylo by to něco jako:

select ip_address
from XMLTable (
  XMLNamespaces (
    default 'urn:USR1',
    'http://schemas.xmlsoap.org/soap/envelope/' as "soap"
  ),
  '/soap:Envelope/soap:Body/getAddressForIpResponse/p-address'
  passing xmltype(response_string)
  columns ip_address varchar2(15) path '.');

db<>fiddle




  1. ORA-01799:Sloupec nesmí být externě připojen k poddotazu

  2. Dělená tabulka Oracle

  3. MySQL neaktualizuje information_schema, pokud ručně nespustím ANALYZE TABLE `myTable`

  4. CDbCommand::fetchColumn() se nezdařilo:SQLSTATE[HY000]:Obecná chyba:2014 Nelze provést dotazy, když jsou aktivní ostatní dotazy bez vyrovnávací paměti