向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介:

转自原文 向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法

写了一个小程序,从一个列表中读取坐标串,每个坐标串生成一个IPolygon,然后将这些Polygon添加到一个SDE图层中,
向SDE中添加要素的初始代码类似下面:

复制代码
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;  
workspaceEdit.StartEditing(true);  
workspaceEdit.StartEditOperation();  
for(int i=0;i<polygons.count;i++)  
{  
    IFeature tmpFea = fc.CreateFeature();           //fc是图层对应的IFeatureClass  
        tmpFea.Shape = GetPolygonFromCoord(polygons[i]);  
    tmpFea.Store();    
}  
workspaceEdit.StartEditing(true);  
workspaceEdit.StartEditOperation();  
复制代码

要素较少时可以正确地写入SDE图层,但大概超过300个左右,之后就会报这个错误:“ORA-00604: 递归 SQL 级别 1 出现错误,ORA-01000: 超出打开游标的最大数”,环境是ArcSDE9.3 + Oralce9i(之后还在ArcSDE9.3 + Oracle10g的环境里做了测试,结果基本相同,但将目标图层换为FileGDB图层后,没有出现该问题,说明应该是Oracle数据库的相关设置的原因)。
联系ESRI技术支持,说可能是游标没有释放的问题,而且谈到在向FeatureClass中添加大量数据时,使用IFeatureCursor效率会比较高,而且可以通过将IFeatureCursor释放的方法来避免出现这个问题,代码修改为:

复制代码
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;  
workspaceEdit.StartEditing(true);  
workspaceEdit.StartEditOperation();  
IFeatureBuffer featureBuffer = fc.CreateFeatureBuffer();        //fc是图层对应的IFeatureClass  
IFeatureCursor featureCursor = fc.Insert(true);  
for(int i=0;i<polygons.count;i++)  
{  
    featureBuffer.set_Value(featureBuffer.Fields.FindField("PRODUCTID"), id);  
        featureBuffer.Shape =  GetPolygonFromCoord(polygons[i]);  
        object featureOID = featureCursor.InsertFeature(featureBuffer);  
}  
featureCursor.Flush();  
workspaceEdit.StartEditing(true);  
workspaceEdit.StartEditOperation();  
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);  
复制代码

修改后,问题依旧,再咨询ESRI技术支持后,可能是相关资源没有自动回收的原因,在代码最后加上GC.Collect();问题解决。

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。


    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6262458.html ,如需转载请自行联系原作者


相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
API 开发者
提供一份 1688 商品详情接口的错误码及解决方法
本文介绍了 1688 商品详情接口常见的错误码及其解决方法,包括 401(未授权)、403(禁止访问)、404(未找到)、429(请求过多)和 500/502/504(服务器错误)。详细说明了每个错误码的含义及相应的解决步骤,帮助开发者快速定位并解决问题。
|
12月前
|
存储 SQL 前端开发
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)
接着上回的【若依RuoYi-Vue | 项目实战】基于若依的帝可得后台管理系统(一),本次我们继续完成人员管理、设备管理、策略管理模块的开发。
1847 6
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)
|
前端开发 JavaScript
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
567 4
|
机器学习/深度学习 搜索推荐 数据可视化
机器学习中7种常用的线性降维技术总结
上篇文章中我们主要总结了非线性的降维技术,本文我们来总结一下常见的线性降维技术。
938 6
|
数据采集 机器学习/深度学习 算法
Python实现AdaBoost分类模型(AdaBoostClassifier算法)项目实战
Python实现AdaBoost分类模型(AdaBoostClassifier算法)项目实战
|
存储 设计模式 Java
阿里官方代码规范
这篇文章详细介绍了阿里巴巴官方的代码规范,包括命名规则、常量使用、方法覆写、并发处理、注释规范、数据库设计等多个方面,旨在提高代码的可读性、维护性和扩展性。
|
分布式计算 Unix MaxCompute
在MaxCompute中,时间的计算是基于秒的
在MaxCompute中,时间的计算是基于秒的
282 1
|
消息中间件 存储 Java
Java中「Future」接口详解
有的任务只强调执行过程,并不需要追溯任务自身的执行结果;有些任务即强调执行过程,又需要追溯任务自身的执行结果;
405 0
Java中「Future」接口详解
|
前端开发
前端学习案例2-Aop切面编程2
前端学习案例2-Aop切面编程2
150 0
前端学习案例2-Aop切面编程2
圣诞树的打印
圣诞树的打印
234 0