记一次使用utl_http方法调用接口,报字符或值错误
2021-06-27 21:06
标签:接口 stop sage end bms etl 方法 限制 buffer 背景:ebs系统和其他系统通过utl_http包调用接口,使用log方法记录日志。 某次调用接口,执行到记录日志行报字符或值错误。 查找原因,发现是p_str的长度超过的32747的限制。 解决办法: 参考: UTTL_HTTP to POST CLOB request http://www.orafaq.com/forum/t/202946/ 记一次使用utl_http方法调用接口,报字符或值错误 标签:接口 stop sage end bms etl 方法 限制 buffer 原文地址:http://www.cnblogs.com/huanghongbo/p/7145365.html 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