Я вызываю сервис Soap в plsql, и я получаю ответ в формате xml, хочу проанализировать xml и сохранить одно значение в таблице Oracle.Ниже xml output:
<?xml version="1.0" encoding="UTF-8"?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <s:Header> <ActivityId xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics" CorrelationId="3c08103b-65da-4f34-95e7-ec2c90ba5b74">00000000-0000-0000-0000-000000000000</ActivityId> <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1"> <u:Timestamp u:Id="_0"> <u:Created>2019-04-16T20:21:06.467Z</u:Created> <u:Expires>2019-04-16T20:26:06.467Z</u:Expires> </u:Timestamp> </o:Security> </s:Header> <s:Body> <SaveSalesResponse xmlns="https://unifree.com.tr/services/custom"> <SaveSalesResult xmlns:a="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:Result>true</a:Result> <a:Provision> <a:ProvisionNo>245982</a:ProvisionNo> </a:Provision> </SaveSalesResult> </SaveSalesResponse> </s:Body> </s:Envelope>
Я хочу сохранить <a:ProvisionNo>245982</a:ProvisionNo> это число в таблице. Пожалуйста, предложите простой способ сохранить значение в таблице
<a:ProvisionNo>245982</a:ProvisionNo>
Исходя из предположения, что предоставленный вами пример документа представляет макет используемого документа (что существует только один <s:Body>, только один <SaveSalesResponse> и т. Д. Для одного <a:PorivisionNo> на документ,тогда EXTRACTVALUE - это все, что требуется.
<s:Body>
<SaveSalesResponse>
<a:PorivisionNo>
EXTRACTVALUE
Если ваш набор данных содержит более сложные структуры, содержащие несколько <a:ProvisionNo> для документа, я бы рекомендовал извлекать значения с помощью XMLQUERY / XMLTABLE.
<a:ProvisionNo>
XMLQUERY
XMLTABLE
Ниже приведен пример загрузки таблицы с помощью <a:ProvisionNo> через EXTRACTVALUE.
CREATE TABLE PROVISION_NO(THE_PROVISION_NO INTEGER); Table created.
Затем запустите загрузку:
INSERT INTO PROVISION_NO(THE_PROVISION_NO) SELECT EXTRACTVALUE( XMLTYPE('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <s:Header> <ActivityId xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics" CorrelationId="3c08103b-65da-4f34-95e7-ec2c90ba5b74">00000000-0000-0000-0000-000000000000</ActivityId> <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1"> <u:Timestamp u:Id="_0"> <u:Created>2019-04-16T20:21:06.467Z</u:Created> <u:Expires>2019-04-16T20:26:06.467Z</u:Expires> </u:Timestamp> </o:Security> </s:Header> <s:Body> <SaveSalesResponse xmlns="https://unifree.com.tr/services/custom"> <SaveSalesResult xmlns:a="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:Result>true</a:Result> <a:Provision> <a:ProvisionNo>245982</a:ProvisionNo> </a:Provision> </SaveSalesResult> </SaveSalesResponse> </s:Body> </s:Envelope>'), '/s:Envelope/s:Body/*:SaveSalesResponse/*:SaveSalesResult/a:Provision/a:ProvisionNo', 'xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" ') FROM DUAL; 1 row created.
И результат:
SELECT THE_PROVISION_NO FROM PROVISION_NO; THE_PROVISION_NO ___________________ 245982 1 row selected.