版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
哪位大神知道这个问题改怎么解决?