sql >> データベース >  >> RDS >> Oracle

Oracle12cXMLは応答から値を取得します

    できます 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;
    

    ただし、extractvalue 非推奨 ;したがって、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;
    

    どちらの方法でも、デフォルトのsoapを指定する必要があります 名前空間。

    db <> fiddle

    複数ビットのデータを抽出する場合は、XMLTableを使用することもできます。ここではあまり追加されませんが、次のようになります:

    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<>フィドル




    1. ライブマテリアライズドビューでMySQLとPostgresに参加する方法

    2. JDBC/PostgreSQLでSQL配列型を使用してResultSetを更新する

    3. MySQLSUMIFフィールドb=フィールドa

    4. PostgresCopyに大きなtxtファイルの最初の行を無視させる方法