使用UTL_HTTP工具包发送含有CLOB的请求报错?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013624074/article/details/79217965

当我们将CLOB解析出来以后会出现一下的错误!

程序的代码如下:

DECLARE
  v_doc_fin    CLOB;
  req          utl_http.req;
  res          utl_http.resp;
  url          VARCHAR2(1900) := 'http://oa.t.ziroom.com/sys/webservice/kmReviewWebserviceService';
  v_value      VARCHAR2(4000);
  vchunkdata   VARCHAR2(2000);
  v_req_length NUMBER;
  buffer       VARCHAR2(32767);
  offset       NUMBER := 1;
  amount       NUMBER := 32767;
  utl_err      VARCHAR2(1000);
  v_fin        BLOB;
  l_clob       CLOB;
BEGIN

  BEGIN
    SELECT fl.file_data
      INTO v_fin
      FROM fnd_attached_docs_form_vl fad
          ,fnd_lobs                  fl
     WHERE fad.function_name = 'PO_POXPOEPO'
       AND fad.entity_name = 'PO_HEADERS'
       AND fad.category_id = 1000645 --通用合同审批
       AND fl.file_id = fad.media_id
       AND fad.pk1_value = 4079;
  END;

  SELECT blob_to_clob(v_fin) INTO l_clob FROM dual;

  ----
  v_doc_fin := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://sys.webservice.client" xmlns:web="http://webservice.review.km.kmss.landray.com/">
       <soapenv:Header>
          <tns:user>review</tns:user>
        <tns:password>480aeb42d7b1e3937fe8db12a1ffe6d8</tns:password>
       </soapenv:Header>
   <soapenv:Body>
      <web:addReview>
         <!--Optional:-->
         <arg0>
            <!--Zero or more repetitions:-->
            <attachmentForms>
               <!--Optional:-->
               <fdKey>fd_ATTACHMENT_FILES</fdKey>
               <!--Optional:-->
               <fdFileName>创建会计科目_071116.rtf</fdFileName>
               <!--Optional:-->
               <fdAttachment>' || l_clob ||
               '</fdAttachment>
            </attachmentForms>
            <!--Optional:-->
            
            <!--Optional:-->
            <docContent></docContent>
            <!--Optional:-->
            <docCreator>{PersonNo:"20253519"}</docCreator>
            <!--Optional:-->
            <docProperty>[""]</docProperty>
            <!--Optional:-->
            <docStatus>20</docStatus>
            <!--Optional:-->
            <docSubject>标准PO测试</docSubject>
            <!--Optional:-->
            <fdKeyword>[""]</fdKeyword>
            <!--Optional:-->
            <fdTemplateId>160db6fb8c305c1fb9b8887435892f77</fdTemplateId>
            <!--Optional:-->
            <flowParam>{auditNode:"请审批"}</flowParam>
            <formValues>{
  "fd_ORG_NAME": {
    "DeptNo": "100432"
  },
  "fd_PR_NUMBER": "SQ20171123010",
  "fd_REQUISITION_HEADER_ID": "5075",
  "fd_PR_TYPE": "内部申请",
  "fd_NEED_DEPT": {
    "DeptNo": "100001"
  },
  "fd_FULL_NAME": {
    "PersonNo": "20173272"
  },
  "fd_DESCRIPTION": "",
  "fd_ISEMERGENCY": "2",
  "fd_ISSUPPLIER": "2",
  "fd_AMOUNT": "700",
  "fd_MXB": {
    "fd_MXB.fd_BUDGET_DEPT": ["100018", "100018"],
    "fd_MXB.fd_LINE_NUM": ["1", "2"],
    "fd_MXB.fd_ITEM_NUMBER": ["01010002", "0987891"],
    "fd_MXB.fd_ITEM_DESCRIPTION": ["测试专用版测试专用版测试专用版测试专用版测试专用版测试专用版.测试专用版测试专用版测试专用版测试专用版测试专用版测试专用版.测试专用版测试专用版", "行政采购.食品饮料.药品"],
    "fd_MXB.fd_QUANTITY": ["10", "100"],
    "fd_MXB.fd_UNIT_PRICE": ["10", "6"],
    "fd_MXB.fd_NEED_BY_DATE": ["", ""],
    "fd_MXB.fd_BUDGET_PROJECT": ["", ""],
    "fd_MXB.fd_COA_BUS_TYPE": ["", ""],
    "fd_MXB.fd_PR_AREA": ["", ""],
    "fd_MXB.fd_PR_PROJECT": ["", ""],
    "fd_MXB.fd_PR_CAUSE": ["", ""]
  }
}</formValues>
         </arg0>
      </web:addReview>
   <web1:addReview xmlns:web1="http://webservice.review.km.kmss.landray.com/"/></soapenv:Body>
</soapenv:Envelope>';
   --dbms_output.put_line('v_doc_fin=>'||v_doc_fin);
  IF v_doc_fin IS NOT NULL THEN
    --v_doc_fin is JSON DOC of CLOB data type from a procedure
    v_req_length := dbms_lob.getlength(v_doc_fin);
    dbms_output.put_line(v_req_length);
 
    req := utl_http.begin_request(url
                                 ,'POST'
                                 ,'HTTP/1.1');
    utl_http.set_header(req
                       ,'Content-Length'
                       ,v_req_length);
    utl_http.set_header(req
                       ,'user-agent'
                       ,'mozilla/4.0');
    utl_http.set_header(req
                       ,'content-type'
                       ,'text/xml;charset=UTF-8');
    utl_http.set_header(req
                       ,'Transfer-Encoding'
                       ,'chunked');
    utl_http.set_body_charset('UTF-8');
    WHILE (offset < v_req_length) LOOP
      buffer:='';
      dbms_lob.read(v_doc_fin
                   ,amount
                   ,offset
                   ,buffer);
      utl_http.write_text(r    => req
                         ,data => buffer);
      offset := offset + amount;
    END LOOP;
    res := utl_http.get_response(req);
    BEGIN
      LOOP
        utl_http.read_line(res
                          ,v_value);
        dbms_output.put_line(v_value);
      END LOOP;
      utl_http.end_response(res);
    EXCEPTION
      WHEN utl_http.end_of_body THEN
        utl_http.end_response(res);
      WHEN utl_http.too_many_requests THEN
        utl_http.end_response(res);
      WHEN OTHERS THEN
        dbms_output.put_line(utl_http.get_detailed_sqlerrm);
        dbms_output.put_line(dbms_utility.format_error_stack);
        dbms_output.put_line(dbms_utility.format_error_backtrace);
        dbms_output.put_line(dbms_utility.format_call_stack);
    END;
  ELSE
    dbms_output.put_line('数据为空!');
  END IF;
EXCEPTION
  WHEN OTHERS THEN
    utl_http.end_response(res);
    utl_err := utl_http.get_detailed_sqlerrm;
END;

哪位大神知道这个问题改怎么解决?

猜你喜欢

转载自blog.csdn.net/u013624074/article/details/79217965