ORACLE里面BULK INSERT语法有么?

teleinfor 2013-05-18 09:14:49
如何像SQL SERVER那样利用BULK INSERT那样大批量导入格式化文本文件呢?
...全文
659 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych888 2013-06-27
  • 打赏
  • 举报
回复
要是用INSERT的话,可以考虑用并行、直接路径、NOLOGGING方式
hrui99 2013-06-27
  • 打赏
  • 举报
回复
可以批量使用数据集。 BULK COLLECT INTO 查查这个用法,能不能满足你的要求。
teleinfor 2013-05-21
  • 打赏
  • 举报
回复
多谢,的确如此。我这里确实是一个流水线作业的过程。 其他系统生产格式化文本数据 ----->伺服进程负责监视格式化数据产生------>定时格式化导入目标数据库 这里我计划使用的是编写一个程序来监视目标文件,然后自动导入数据库。不过目前我使用的是ADO或者更给为使用OCI接口数据库编程。
引用 6 楼 wqkjj 的回复:
如果你用proc编程,组用好了,应该是效率很高的,比sqlldr不会慢多少。用OCI的话,里面有一种称为DPL技术,说白了就是sqlldr的API,效率也是很高的。V9以后的proc组插入,我猜可能统一到DPL了。 因为你这是一个自动流水线过程,建议你试试程序插入,这样好控制异常以及异常处理。
wqkjj 2013-05-21
  • 打赏
  • 举报
回复
如果你用proc编程,组用好了,应该是效率很高的,比sqlldr不会慢多少。用OCI的话,里面有一种称为DPL技术,说白了就是sqlldr的API,效率也是很高的。V9以后的proc组插入,我猜可能统一到DPL了。 因为你这是一个自动流水线过程,建议你试试程序插入,这样好控制异常以及异常处理。
teleinfor 2013-05-21
  • 打赏
  • 举报
回复
先这么做吧。我试试看。
引用 8 楼 vanjayhsu 的回复:
[quote=引用 7 楼 teleinfor 的回复:] 多谢,的确如此。我这里确实是一个流水线作业的过程。 其他系统生产格式化文本数据 ----->伺服进程负责监视格式化数据产生------>定时格式化导入目标数据库 这里我计划使用的是编写一个程序来监视目标文件,然后自动导入数据库。不过目前我使用的是ADO或者更给为使用OCI接口数据库编程。 [quote=引用 6 楼 wqkjj 的回复:] 如果你用proc编程,组用好了,应该是效率很高的,比sqlldr不会慢多少。用OCI的话,里面有一种称为DPL技术,说白了就是sqlldr的API,效率也是很高的。V9以后的proc组插入,我猜可能统一到DPL了。 因为你这是一个自动流水线过程,建议你试试程序插入,这样好控制异常以及异常处理。
[/quote] 那其实很简单了,你写个C#程序判断下文件有没有生成,然后调用SQLLDR就可以了,它其实是一个批处理命令,就跟调用BAT一样的。[/quote]
vanjayhsu 2013-05-21
  • 打赏
  • 举报
回复
引用 7 楼 teleinfor 的回复:
多谢,的确如此。我这里确实是一个流水线作业的过程。 其他系统生产格式化文本数据 ----->伺服进程负责监视格式化数据产生------>定时格式化导入目标数据库 这里我计划使用的是编写一个程序来监视目标文件,然后自动导入数据库。不过目前我使用的是ADO或者更给为使用OCI接口数据库编程。 [quote=引用 6 楼 wqkjj 的回复:] 如果你用proc编程,组用好了,应该是效率很高的,比sqlldr不会慢多少。用OCI的话,里面有一种称为DPL技术,说白了就是sqlldr的API,效率也是很高的。V9以后的proc组插入,我猜可能统一到DPL了。 因为你这是一个自动流水线过程,建议你试试程序插入,这样好控制异常以及异常处理。
[/quote] 那其实很简单了,你写个C#程序判断下文件有没有生成,然后调用SQLLDR就可以了,它其实是一个批处理命令,就跟调用BAT一样的。
teleinfor 2013-05-20
  • 打赏
  • 举报
回复
引用 4 楼 u010412956 的回复:
[quote=引用 3 楼 teleinfor 的回复:] 非常感谢。查了写资料看到有一个forall的出来,不过也是利用insert into ...组条插入,然后批量利用commit提交的,性能到底提升多少表示怀疑。 sqlload倒是一个不错的方法。这里我有一个疑问请教:我是利用一个自己开发的工具实现数据的导入的,因为其他系统过来的数据源源不断有产生,我需要把他缠身的数据随时监控随时导入ORACLE数据库。这样子的话我就需要调用sqlload来实现可控制的导入。不知道这个方案是否可行? 多谢指点。 [quote=引用 1 楼 u010412956 的回复:] 用sqlload吧。。。 Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个数据文件的数据 2)可装入固定格式,自由定界以及可度长格式的数据 3)可以装入二进制,压缩十进制数据 4)一次可对多个表装入数据 5)连接多个物理记录装到一个记录中 6)对一单记录分解再装入到表中 7)可以用 数对制定列生成唯一的KEY 8)可对磁盘或 磁带数据文件装入制表中 9)提供装入错误报告 10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。
[/quote] 那你问问题就没说明白。 你到底是要将文件批量 入进数据库。。 还是 入进数据库后,对这些数据二次加工批量处理到其他表? 这完全就是2回事了,文件入库,oracle提供了sqlload。 如果是表 对表的批量处理,oracle 有 bulk collect into批量处理语句[/quote] 哦,是这样的。我是文件导入数据库的应用。场景如下: 其他系统 ---->产生文本格式化文件---->自动软件调用sqlload导入数据库
u010412956 2013-05-20
  • 打赏
  • 举报
回复
引用 3 楼 teleinfor 的回复:
非常感谢。查了写资料看到有一个forall的出来,不过也是利用insert into ...组条插入,然后批量利用commit提交的,性能到底提升多少表示怀疑。 sqlload倒是一个不错的方法。这里我有一个疑问请教:我是利用一个自己开发的工具实现数据的导入的,因为其他系统过来的数据源源不断有产生,我需要把他缠身的数据随时监控随时导入ORACLE数据库。这样子的话我就需要调用sqlload来实现可控制的导入。不知道这个方案是否可行? 多谢指点。 [quote=引用 1 楼 u010412956 的回复:] 用sqlload吧。。。 Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个数据文件的数据 2)可装入固定格式,自由定界以及可度长格式的数据 3)可以装入二进制,压缩十进制数据 4)一次可对多个表装入数据 5)连接多个物理记录装到一个记录中 6)对一单记录分解再装入到表中 7)可以用 数对制定列生成唯一的KEY 8)可对磁盘或 磁带数据文件装入制表中 9)提供装入错误报告 10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。
[/quote] 那你问问题就没说明白。 你到底是要将文件批量 入进数据库。。 还是 入进数据库后,对这些数据二次加工批量处理到其他表? 这完全就是2回事了,文件入库,oracle提供了sqlload。 如果是表 对表的批量处理,oracle 有 bulk collect into批量处理语句
teleinfor 2013-05-20
  • 打赏
  • 举报
回复
非常感谢。查了写资料看到有一个forall的出来,不过也是利用insert into ...组条插入,然后批量利用commit提交的,性能到底提升多少表示怀疑。 sqlload倒是一个不错的方法。这里我有一个疑问请教:我是利用一个自己开发的工具实现数据的导入的,因为其他系统过来的数据源源不断有产生,我需要把他缠身的数据随时监控随时导入ORACLE数据库。这样子的话我就需要调用sqlload来实现可控制的导入。不知道这个方案是否可行? 多谢指点。
引用 1 楼 u010412956 的回复:
用sqlload吧。。。 Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个数据文件的数据 2)可装入固定格式,自由定界以及可度长格式的数据 3)可以装入二进制,压缩十进制数据 4)一次可对多个表装入数据 5)连接多个物理记录装到一个记录中 6)对一单记录分解再装入到表中 7)可以用 数对制定列生成唯一的KEY 8)可对磁盘或 磁带数据文件装入制表中 9)提供装入错误报告 10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。
vanjayhsu 2013-05-20
  • 打赏
  • 举报
回复
引用 1 楼 u010412956 的回复:
用sqlload吧。。。 Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个数据文件的数据 2)可装入固定格式,自由定界以及可度长格式的数据 3)可以装入二进制,压缩十进制数据 4)一次可对多个表装入数据 5)连接多个物理记录装到一个记录中 6)对一单记录分解再装入到表中 7)可以用 数对制定列生成唯一的KEY 8)可对磁盘或 磁带数据文件装入制表中 9)提供装入错误报告 10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。
同意。。。
u010412956 2013-05-19
  • 打赏
  • 举报
回复
用sqlload吧。。。 Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个数据文件的数据 2)可装入固定格式,自由定界以及可度长格式的数据 3)可以装入二进制,压缩十进制数据 4)一次可对多个表装入数据 5)连接多个物理记录装到一个记录中 6)对一单记录分解再装入到表中 7)可以用 数对制定列生成唯一的KEY 8)可对磁盘或 磁带数据文件装入制表中 9)提供装入错误报告 10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧