VB程序如何用ADO向Oracle存储过程传递数组参数?

应用需求是每次要插入5万条记录,数据库是Oracle11g,客户端是VB6程序,用ADO连接数据库。如果客户端执行Insert语句,再怎么优化也至少要用几十秒。所以我在O...   应用需求是每次要插入5万条记录,数据库是Oracle 11g,客户端是VB6程序,用ADO连接数据库。
  如果客户端执行Insert语句,再怎么优化也至少要用几十秒。所以我在Oracle做了存储过程,利用forall语句对数组的批量处理,模拟测试只需几十毫秒(这才是大型数据库应有的高性能啊!)。问题是作为客户端的VB程序,如何将大量数据作为参数传递给存储过程呢?
  如果VB将数据拼接成一个大字符串传递,总是突破不了32767字节的限制。并且,Oracle的存储过程内分割字符串也比较慢(Oracle本身不提供split这样直接分割的函数,只能自己循环调用instr函数和substr函数),多次调用存储过程累计插入5万条记录要8秒。
  所以还是应该用数组向存储过程传递参数,这样存储过程内的forall语句就能直接用数组批量。为此,我已经将存储过程的参数类型定义为s_array(Oracle不直接支持数组,必须利用自定义数据类型varray(50000) of varchar2(50))。但是在VB客户端这边,adodb.parameter对象虽然可以定义type属性为adArray + adVariant,运行起来却报告“类型名称错误”;按说,既然type常量有adArray这样的关键字,ADODB的机制是支持数组参数的啊,到底应该如何使用呢?
展开
 我来答
匿名用户
2014-07-23
展开全部
何苦如此呢,要达到最高效率,当然不能再去解析字符串了,建一张临时表tab,把你要传递的参数插入tab中,存储过程中直接关联下tab不就获取到你要的数据了么
更多追问追答
追问
把5万条数据先插入临时表?问题不是同样吗,客户端仍然面临如何高效插入大量数据的问题啊?
追答
搞不懂,你这5万条数据是从哪里获取的,vb一个个计算得到的?还是数据库表里面查出来的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Coo_boi
2014-07-25 · TA获得超过1333个赞
知道大有可为答主
回答量:2209
采纳率:50%
帮助的人:251万
展开全部
"这样的数量选择ado的方式会很慢,建议楼主使用sqlldr或者imp/import这些命令工具,用vb写个shell就行了。" 谢谢你的分~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式