进化!Oracle官方工具导入Excel数据

Oracle导入Excel数据一直是个挺麻烦的事情,毕竟Excel的格式是微软所有,SQLServer的支持要更好些。以前常见的解决方法就是在Excel里另存为CSV文件,CSV实际上就是逗号或者TAB分隔的TXT文件,因此可以通过sqlldr(sqlloader)来导入。有一个比较麻烦的问题就是,如果字段中间有逗号就会被识别成两个字段。一个workaround就是另存成CSV的时候设置把文本字段用双引号引上,在sqlldr的ctl文件里可以设置enclosed by ‘”‘。但遇到字段内容复杂的文本,依然很难解决。

然后看到了第三方工具的进化,PL/SQL Developer里面可以select * from table_name for update或者select a.*,rowid from table_name来打开表进行编辑,直接拷贝整个Excel数据然后贴进去并提交。以前我基本都是用这个方法,还是比较简单易行的。这个方法不方便的地方就是如果数据量大,耗内存不少,因为数据要全部进剪贴板,数据量大的时候还是容易出问题的。PL/SQL Developer的实现方式也是提交时逐行插入。另外如果你需要导入的Excel与表的格式不一致,就比较麻烦了,得先在Excel里做好数据库表的形式才行。

最近不搞数据库了,今天要整理点数据,又琢磨着用数据库来减轻工作量,正好MacBook上的Oracle也刚装好。MAC OS X下就没有第三方工具的选择了,直接下载了一个Oracle自己的SQLDeveloper 1.5.4,安装就觉得比以前大了很多。刚出测试版的时候我还写过一篇博客,当时基本只能运行SQL语句而已。现在的功能确实强大很多,管理功能也不比TOAD差太多,跑SQL也算顺手,不过是基于JAVA的,我估计处理大数据量对内存消耗还是很猛。言归正传,在里面果然找到了导入数据的功能,一试,可以导入XLS和CSV!而且既可以直接导入然后过程中选择新建表和字段的属性等等,也可以导入到已经存在的表里,可以选择字段的对应关系,还是非常方便。可惜好事多磨,一上来实战就晕了,总是报错。提示我源数据和导入的表字段格式不一致,甚至我导出表为Excel文件然后进行修改后也无法导入。搜索一番发现,国内用这个官方工具的还真少。英文搜索咯……果然在Oracle Forum找到了反映类似问题的帖子。老外们研究得还真细,琢磨出1.5.2和以前的版本导入不完善,无法正常处理,到1.5.3修正了,但到1.5.4反而总提示出错。立刻准备换1.5.3,可惜官方下载居然失效了。回到论坛一看置顶,原来1.5.4已经进行了修正!哈哈,即刻升级(顺便说一句,如果下载进度条没有显示直接跳过,那是没有下载成功,我最终是翻%墙出去搞定的)!果然一次性导入成功(14000+行,含复杂中文、特殊字符等)。现在非Win平台上也有Oracle开发利器了,赞一下Oracle!