如何消除oracle

时间:2018-05-15 09:24:53

标签: oracle plsql

需要帮助消除UTL_HTTP.read_text.sorry中的标题,直接引起我的怀疑。

我有一个代码,我试图从pl / sql程序连接WSDL 在我的代码中,我使用的是UTL_HTTP.read_text而不是UTL_HTTP.READ_LINE。

UTL_HTTP.read_text(l_http_resp,l_text,32767);
DBMS_LOB.writeappend (l_ws_response, LENGTH(l_text), l_text);

Read_line:

utl_http.read_line(l_http_resp, l_ws_response);

我选择read_text而不是read_line的原因是,提供给UTL_http的请求有比varchar2限制更多的数据,并且当我使用read_text而不是read_line时(因为ASK TOM建议)它正在工作。 / p>

现在当我使用read_text时,标题会附加响应。

示例输出,当我使用read_text

***从回复中打印标题

Connection: close
Date: Tue, 15 May 2018 08:55:12 GMT
Transfer-Encoding: chunked
Content-Type: text/xml;charset="utf-8"
X-Powered-By: Servlet/2.5 JSP/2.1

**打印回复详情 - 08:55:14.319

 Servlet/2.5 JSP/2.1<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">...

在xml开始之前,文本“Servlet / 2.5 JSP / 2.1”与xml响应相关,但是,当我使用read_line im只获取read_line时,如何消除标题回应。

1 个答案:

答案 0 :(得分:0)

为了从Web服务中读取更长的字符串,我使用以下代码:

   l_http_request    UTL_HTTP.REQ;
   l_http_response   UTL_HTTP.RESP;
   BUFFER   VARCHAR2(32767);
   l_response_clob   CLOB;
    xml XMLTYPE;

BEGIN

    ...
    l_http_response := UTL_HTTP.GET_RESPONSE(l_http_request);

    DBMS_LOB.CREATETEMPORARY(l_response_clob, TRUE, DBMS_LOB.CALL);
    DBMS_LOB.OPEN(l_response_clob, DBMS_LOB.LOB_READWRITE);

    BEGIN
    LOOP
        UTL_HTTP.READ_TEXT(l_http_response, BUFFER, 32767);
        DBMS_LOB.WRITEAPPEND(l_response_clob, LENGTH(BUFFER), BUFFER);
    END LOOP;
    EXCEPTION
        WHEN UTL_HTTP.END_OF_BODY THEN
            UTL_HTTP.END_RESPONSE(l_http_response);
    END;
    DBMS_LOB.CLOSE(l_response_clob);

    xml := XMLTYPE(l_response_clob);
    ... do whatever you need with XML docuemnt

    DBMS_LOB.FREETEMPORARY(l_response_clob);

END;