记一次使用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/

时间: 2024-10-15 07:29:04

记一次使用utl_http方法调用接口,报字符或值错误的相关文章

记一次重构:并行化调用接口实践

优化目标 在我现在所在的产品线中 http 接口被大量使用,用来获取各种开放数据,可以说 http 调用在代码中随处可见.比如一个访问最频繁的页面,一次请求将会产生 7~8 次 http 调用.虽然每个接口都非常的快,但 8 次累加起来的消耗还是相当的可观,所以我最近的优化工作主要是: 并行调用各 http 请求,以缩短脚本的运行时间. 重构起因 实际上,将请求并行化并不十分困难,使用 curl 提供的 multi* 方法族就可以实现,网上有很多类似的文章来介绍其使用方法,大致的思想是把多个 c

转载:RMI 远程方法调用

Java 分布式处理技术 1.1 RMI 的基本概念 1.1.1 什么是RMI RMI(Remote Method Invocation) 远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样. 1.1.2 RMI 的用途 1. 分布式体系结构 我们为什么要使用分布式计算呢? ?         当我们想与多个用户或客户机共享一个中央资源(如一个数据

hadoop;RPC;调用接口;cmd的jps查看java进程;有main方法的类才能产生进程

实验平台: redhat 6    以安装 安装步骤: (1):在网上找到自己想要的交叉工具链安装包 (2):解压自己的安装包   ; tar -xzvf arm-linux-gcc-4.3.2.tar.gz   -C /     解压到或目录 或tar  -xjvf   arm-linux-gcc-3.4.5.tar.bz2   -C / 在解压的过程中我们可以看到,其可执行程序,被解压到/usr/local/arm/3.4.5/bin, (4):修改配置文件 vim  /etc/profil

实现跨域iframe接口方法调用 简单介绍

实现跨域iframe接口方法调用 简单介绍: 页面a.html域名为www.a.com,嵌入页面http://www.b.com/b.html. b.html要调用a.html中的js函数,由于两个页面不在一个域中,会提示没权限. 下面就介绍一下如何如何解决此问题,需要的朋友可以做一下参考. 一.cross.js代码如下: (function(global){ global.Cross = { signalHandler: {}, on: function(signal, func){ this

JAVA的List接口的remove重载方法调用原理

前言 说真的,平常看源码都是自己看完自己懂,很少有写出来的冲动. 但是在写算法的时候,经常用到java中各种集合,其中也比较常用到remove方法. remove有重载函数,分别传入参数是索引index或者数据Object(指定泛型后自动转换),如果指定泛型是其他数据类型还好,但是指定的是Integer或者是int的话,或者就有点懵了. 这曾经也困惑过我,所以我就唯有用实践解惑了. 测试类设计 测试类一 public class Text { public void remove(int ind

多态方法调用的解析和分派

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍.最频繁的操作,Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于之前说的直接引用).这个特性给Java带来了更强大的动态扩展能力,但也使得Java方法调用过程变得相对复杂起来,需要在类加载期间,甚至到运行期间才能确定目标方法

深入理解Java虚拟机笔记---方法调用

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍.最频繁的操作.在Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于直接引用).这个特性给Java带来了更强大的动态扩展能力,但也使得Java方法的调用过程变得相对复杂,需要在类加载期间甚至到运行期间才能确定目标方法的直接引用.

java虚拟机之方法调用(上)

前言 我们都知道,面象对象的几大特性:封装,继承,多态. 其实在面试过程中也是经常被问到这个问题的.那么问题来了,java虚拟机是如何实现多态的? 其实在java虚拟机中,说到多态的实现,就不得不说说方法调用了. 方法调用概念 方法调用并不等于方法执行,方法调用阶段唯一的任务是确定被调用方法的版本(其实就是调用哪一个方法).我们都知道,Class文件的编译过程中不包含c语言编译中的连接步骤,一切方法调用在Class文件里面都是符号引用,并不是java运行时的入口地址(这里也侧面印证了上一篇文章里

关于JVM中方法调用的相关指令,以及解析(Resolution)和分派(Dispatch)的解释——重载的实现原理与重写的实现原理

JVM中相关方法的调用的指令 invokestatic 调用静态方法. invokespecial 用于调用构造器方法<init>.私有方法.父类方法. invokevirtual 用于调用类的所有虚方法. invokeinterface 用于调用接口方法. 解析(resolution)与分派(dispatch) 解析 解析调用一定是个静态的过程,在编译期间就完全确定,在类装载的解析阶段就会把涉及的符号引用全部转变 为可确定的直接引用,不会延迟到运行期再去完成. 下面我们看一段代码: /**