Я звоню Oracle Fusion runReport Webservice, который должен запустить отчет и вернуть вывод в Encoded Base64 XML. Вот пример ответа
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<runReportResponse xmlns="http://xmlns.oracle.com/oxp/service/PublicReportService">
<runReportReturn>
<reportBytes>PD94==</reportBytes>
<reportContentType>text/xml</reportContentType>
<reportFileID>documents/xmlpwsADwzcugWHW8869757286509792083.tmp</reportFileID>
<reportLocale xsi:nil="true"/>
</runReportReturn>
</runReportResponse>
</soapenv:Body>
</soapenv:Envelope>
Я использую Oracle 11g PL / SQL, чтобы вызвать и проанализировать ответ для сохранения полученных данных в таблице базы данных. Проблема, которую я не могу декодировать "// runReportResponse / runReportReturn / reportContentType" в XMLTYPE, так как нет функции базы данных, которая сделает это. Когда я использовал приведенный ниже код для извлечения данных в BLOB, я получаю следующую ошибку:
SELECT
XMLCAST(XMLQUERY('declare default element namespace "http://xmlns.oracle.com/oxp/service/PublicReportService";
//runReportResponse/runReportReturn/reportBytes'
PASSING l_xmldata RETURNING CONTENT) AS BLOB)
INTO blob_in
FROM dual;
Ошибка (и): - 1706 Ошибка (и): ORA-01706: слишком большое значение результата пользовательской функции
Я пытался использовать функции UTL_ENCODE.BASE64_DECODE и UTL_RAW.CAST_TO_VARCHAR2, но возвращаемый кодированный XML больше, чем VARCHAR2, и попытка разделить строку на более мелкие строки повредила вывод.
I Спасибо за любые советы, как преобразовать в XMLTYPE.
С наилучшими пожеланиями