记一次使用utl_http方法调用接口,报字符或值错误
Posted 黄洪波写点东西的地方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次使用utl_http方法调用接口,报字符或值错误相关的知识,希望对你有一定的参考价值。
背景:ebs系统和其他系统通过utl_http包调用接口,使用log方法记录日志。
某次调用接口,执行到记录日志行报字符或值错误。
查找原因,发现是p_str的长度超过的32747的限制。
解决办法:
PROCEDURE log(p_str VARCHAR2) IS BEGIN fnd_file.put_line(fnd_file.log, p_str); dbms_output.put_line(p_str); END;
--解决l_messge_clob长度超过3276导致的溢出问题,字符或值错误 FOR i IN 0 .. trunc((dbms_lob.getlength(l_messge_clob) - 1) / l_step) LOOP log(dbms_lob.substr(l_messge_clob, l_step, i * l_step + 1)); END LOOP; --同样 utl_http.write_text 长度不能超过32767, buffer VARCHAR2(2000); offset NUMBER := 1; amount NUMBER := 1024; --解决l_messge_clob长度超过3276导致的溢出问题,字符或值错误 ---utl_http.write_text(l_req, p_content); WHILE (offset < v_req_length) LOOP dbms_lob.read(p_content, amount, offset, buffer); utl_http.write_text(r => l_req, data => buffer); offset := offset + amount; END LOOP;
参考:
utl_http request and response stops when > 32k
UTTL_HTTP to POST CLOB request
http://www.orafaq.com/forum/t/202946/
以上是关于记一次使用utl_http方法调用接口,报字符或值错误的主要内容,如果未能解决你的问题,请参考以下文章
Oracle11g utl_http调SAP接口传中文参数报500 Internal Server Error,参数没有中文可以正常运行。帮帮忙