日期:2014-05-16  浏览次数:21350 次

ORACLE里面BULK INSERT语法有么?
如何像SQL SERVER那样利用BULK INSERT那样大批量导入格式化文本文件呢?

------解决方案--------------------
用sqlload吧。。。
Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点:

1)能装入不同数据类型文件及多个数据文件的数据
2)可装入固定格式,自由定界以及可度长格式的数据
3)可以装入二进制,压缩十进制数据
4)一次可对多个表装入数据
5)连接多个物理记录装到一个记录中
6)对一单记录分解再装入到表中
7)可以用 数对制定列生成唯一的KEY
8)可对磁盘或 磁带数据文件装入制表中
9)提供装入错误报告
10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。
------解决方案--------------------
引用:
非常感谢。查了写资料看到有一个forall的出来,不过也是利用insert into ...组条插入,然后批量利用commit提交的,性能到底提升多少表示怀疑。

sqlload倒是一个不错的方法。这里我有一个疑问请教:我是利用一个自己开发的工具实现数据的导入的,因为其他系统过来的数据源源不断有产生,我需要把他缠身的数据随时监控随时导入ORACLE数据库。这样子的话我就需要调用sqlload来实现可控制的导入。不知道这个方案是否可行?

多谢指点。
Quote: 引用:

用sqlload吧。。。
Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点:

1)能装入不同数据类型文件及多个数据文件的数据
2)可装入固定格式,自由定界以及可度长格式的数据
3)可以装入二进制,压缩十进制数据
4)一次可对多个表装入数据
5)连接多个物理记录装到一个记录中
6)对一单记录分解再装入到表中
7)可以用 数对制定列生成唯一的KEY
8)可对磁盘或 磁带数据文件装入制表中
9)提供装入错误报告
10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。


那你问问题就没说明白。
你到底是要将文件批量 入进数据库。。
还是 入进数据库后,对这些数据二次加工批量处理到其他表?

这完全就是2回事了,文件入库,oracle提供了sqlload。
如果是表 对表的批量处理,oracle 有 bulk collect into批量处理语句
------解决方案--------------------
如果你用proc编程,组用好了,应该是效率很高的,比sqlldr不会慢多少。用OCI的话,里面有一种称为DPL技术,说白了就是sqlldr的API,效率也是很高的。V9以后的proc组插入,我猜可能统一到DPL了。
因为你这是一个自动流水线过程,建议你试试程序插入,这样好控制异常以及异常处理。
------解决方案--------------------
引用:
多谢,的确如此。我这里确实是一个流水线作业的过程。

其他系统生产格式化文本数据 ----->伺服进程负责监视格式化数据产生------>定时格式化导入目标数据库

这里我计划使用的是编写一个程序来监视目标文件,然后自动导入数据库。不过目前我使用的是ADO或者更给为使用OCI接口数据库编程。

Quote: 引用:

如果你用proc编程,组用好了,应该是效率很高的,比sqlldr不会慢多少。用OCI的话,里面有一种称为DPL技术,说白了就是sqlldr的API,效率也是很高的。V9以后的proc组插入,我猜可能统一到DPL了。
因为你这是一个自动流水线过程,建议你试试程序插入,这样好控制异常以及异常处理。


那其实很简单了,你写个C#程序判断下文件有没有生成,然后调用SQLLDR就可以了,它其实是一个批处理命令,就跟调用BAT一样的。
------解决方案--------------------
可以批量使用数据集。
BULK COLLECT INTO  查查这个用法,能不能满足你的要求。
------解决方案--------------------
要是用INSERT的话,可以考虑用并行、直接路径、NOLOGGING方式