Perl处理文本数据导入数据库的方法

Perl处理文本数据导入数据库的方法

问题描述:
    处理文件为单个的文本文件,大小大概在100M左右,每个文件为记录数在200万行左右的行记录,每行用特定的分隔符分隔字段。现在要将该文本的记录导入到oracle数据库,请问用什么方法比较快而且好?

刚接触perl,感觉处理是可以处理,但不知道对不对:
    打开文件,采用循环,每行逐行扫描处理后,进行数据库操作,插入一条记录。这样的话200万行的话就要调用数据库的insert语句200万次,感觉效率会不会不高。是否还有其他的处理方法啊?
打开文件,采用循环,每行逐行扫描处理,生成符合数据库导入格式的新文件,调用数据库导入工具,或执行SQL语句导入。
我是想使这个过程自动化,全部perl程序完成,不再进行手工处理和外部工具的处理。
我说的这些过程,用几乎任何常见语言工具都可以做到。


QUOTE:
原帖由 globlefly 于 2007-3-19 23:41 发表
打开文件,采用循环,每行逐行扫描处理后,进行数据库操作,插入一条记录。这样的话200万行的话就要调用数据库的insert语句200万次,感觉效率会不会不高。是否还有其他的处理方法啊?

用过 逐行扫描处理,产生一个 .sql 文件,执行该文件,插入记录到数据库 的方法,效率不高.

用Oralce SQL Loader 会快得多。

比较费事的地方,是如何把 Oracle SQL* Plus 的特殊字符 escape 掉。


QUOTE:
原帖由 globlefly 于 2007-3-19 23:41 发表
问题描述:
    处理文件为单个的文本文件,大小大概在100M左右,每个文件为记录数在200万行左右的行记录,每行用特定的分隔符分隔字段。现在要将该文本的记录导入到oracle数据库,请问用什么方法比较快而且好? ...

不要“恐怕”,UNIX 编程艺术上讲到,不要过早地优化你的程序。简单的思路往往就是最快的,或者已经能够满足你的需求。
用带问号的 insert 语句,先 prepare 一下,然后再 exec,很快的。


QUOTE:
原帖由 flw 于 2007-3-20 09:38 发表

不要“恐怕”,UNIX 编程艺术上讲到,不要过早地优化你的程序。简单的思路往往就是最快的,或者已经能够满足你的需求。
用带问号的 insert 语句,先 prepare 一下,然后再 exec,很快的。

**
这样效率是不是有点底,要先要prepare  300万次,再exec  300万次,
有没有办法prepare1万次,exec 1次   再commit 一次.
如果input文件格式规范, 用sqlldr吧
prepare本来就只要一次的啊。
你可以用sqlloader,或者用external table ,都可以用脚本实现自动化处理