存档

文章标签 ‘SQLDeveloper’

SQLDeveloper的一些bug

2009年5月6日 没有评论

虽然不搞数据库了,不过最近做些分析的时候还是祭出了Oracle这把牛刀,顺便用了下Oracle的这款官方工具。我用的最新版本是1.5.4,出乎意料的强大。唯一不好是基于Java的,对大数据量导入导出想必是不行的(除非有超大内存做后盾)。过程中也发现了不少bug,不过到官方论坛瞄了瞄,还是有开发人员重视的。

  1. 导出结果为Excel(XLS文件)可能遇到ORA-00936。似乎问题是出在解析语句上,如果你的SELECT中存在比如a.*的别名前缀,那么就会触发这个bug。暂时的解决方法有两个,一是重写你的语句,去掉别名前缀(两表关联时候有点麻烦了);再就是把你的结果建成一张表,到时候直接导出表就可以了。
  2. 与中文输入法偶有冲突。在用QIM,如果进入SQLDeveloper时是英文输入,打开程序才切换到中文输入,似乎就一切OK;如果打开前就是中文输入,很大机会只能输入英文了,无法输入中文。
  3. 导入Excel文件时要注意,首行可以冻结,但是不能筛选,否则认不到整个表格。
  4. 不支持导入导出LONG一类的字段。这个大概算功能问题吧,倒也不能完全说是bug。

另外还有一个始终萦绕非Windows系统的字符集问题。在我的MAC OS X 10.5.6上推荐保存导出的Excel和SQL脚本为UTF-8,否则和文本编辑器(比如TextWrangler)可能有些冲突。导出的UTF-8文件在Windows Office 2007是可以正常打开的。

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

2009年5月1日 2 条评论

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!