java连接SAP取数的问题

当使用CNVCF_CCE_RFC_READ_TABLE通用函数取SAP表数据的时候,如果JCoFunction  function这个里面不对ROWCOUNT限制的话,一旦表数据过大就会造成以下错误:

com.sap.conn.jco.JCoException: (104) JCO_ERROR_SYSTEM_FAILURE: No more storage space available for extending an internal table. (raised by system EP1|ZLSAPNEP02)
    at com.sap.conn.jco.rt.MiddlewareJavaRfc.generateJCoException(MiddlewareJavaRfc.java:678)
    at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcClient.execute(MiddlewareJavaRfc.java:2092)
    at com.sap.conn.jco.rt.ClientConnection.execute(ClientConnection.java:1185)
    at com.sap.conn.jco.rt.ClientConnection.execute(ClientConnection.java:1014)
    at com.sap.conn.jco.rt.RfcDestination.execute(RfcDestination.java:1458)
    at com.sap.conn.jco.rt.RfcDestination.execute(RfcDestination.java:1428)
    at com.sap.conn.jco.rt.AbapFunction.execute(AbapFunction.java:332)
    at com.zoomlion.dataCollector.sap.SapManagerImpl.dealFunction_rfcReadTable(SapManagerImpl.java:289)
    at com.zoomlion.dataCollector.sap.SapManagerImpl$$FastClassBySpringCGLIB$$4ac78d14.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
    at com.zoomlion.dataCollector.exception.ExceptionLog.invoke(ExceptionLog.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
    at com.zoomlion.dataCollector.sap.SapManagerImpl$$EnhancerBySpringCGLIB$$1e1e2155.dealFunction_rfcReadTable(<generated>)
    at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl.getTableFieldsSapJcoFunction(CommonProcessCollectionJobImpl.java:965)
    at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl.doSaveTableFields(CommonProcessCollectionJobImpl.java:1003)
    at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl$$FastClassBySpringCGLIB$$3d8bee83.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
    at com.zoomlion.dataCollector.exception.ExceptionLog.invoke(ExceptionLog.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
    at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl$$EnhancerBySpringCGLIB$$b6945be4.doSaveTableFields(<generated>)
    at com.zoomlion.dataCollector.handler.GetSapTableFields.main(GetSapTableFields.java:71)
Caused by: RfcException raised by system [EP1|ZLSAPNEP02]:
    message: No more storage space available for extending an internal table.
    return code: RFC_SYS_EXCEPTION (3)
    error group: 104
    key: RFC_ERROR_SYSTEM_FAILURE
    at com.sap.conn.rfc.engine.RfcIoOpenCntl.RfcReceive(RfcIoOpenCntl.java:2045)
    at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcClient.execute(MiddlewareJavaRfc.java:2032)
    ... 45 more
Caused by: com.sap.conn.rfc.exceptions.RfcGetException: No more storage space available for extending an internal table.
    at com.sap.conn.rfc.engine.RfcImp.ab_rfcerror(RfcImp.java:1176)
    at com.sap.conn.rfc.engine.RfcGet.ab_rfcget(RfcGet.java:120)
    at com.sap.conn.rfc.engine.RfcRcv.ab_rfcreceive(RfcRcv.java:36)
    at com.sap.conn.rfc.engine.RfcIoOpenCntl.RfcReceive(RfcIoOpenCntl.java:1987)
    ... 46 more

其实从报错原因说明No more storage space available for extending an internal table.中就可推测出来应该是数据量过大导致传送空间不够。

这时候可对参数ROWCOUNT设置数量,而不是为0(默认取所有),或者尽可能对增加条件限制数据条数,比如:

1)如果可只取增量数据,可在OPTIONS—>TEXT中设置增量数据的条件,比如时间段的,今天抽数只抽今天内的数据;

2)只取需要字段,可在FIELDS—>FIELDNAME中设置字段;

3)如果要取全量数据,可在OPTIONS—>TEXT中设置对表中时间字段进行切分分开抽取,比如每次只抽一年的或者一个季度的或者一个月的或者一天的,这个需要看你切分的时间段内的数据是否能抽取过来了,如果还是超出的话就要继续往小时间段切分。

 

https://img-blog.csdnimg.cn/20181026100535534.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3R1b2h1YW5nMDMwMw==,size_27,color_FFFFFF,t_70

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值