存档

文章标签 ‘导出’

[重发]Pro*C实现导出Oracle表为文本文件

2009年9月9日 ern 没有评论

旧文重发,原文刊载于2006年6月8日

近日工作需要,要大批量导出数据,开始用SQL*Plus的SPOOL功能。结果老是提示“xrealloc: cannot reallocate XXX bytes”。而且每次发生的时间还不同,有时候是到文件1G就出错,有时候是2G多出错。怀疑是32位Linux问题,换到Solaris 8上还是如故。客户端都是9201的,到Metalink上搜索没有结果。郁闷之余到Oracle-l上发了个邮件,收到一位高手的指点,说可能是内存泄露问题,SQL*Plus的开发人员估计也不会想到有人会导出如此大量数据。在邮件往复之间,那位高手提醒可以用UTL_FILE来导出。忽然想起Tom的两本书里都有提到用PL/SQL来导出,于是翻出书里的那个网址http://asktom.oracle.com/~tkyte/flat/index.html,进去一看,PL/SQL的效率比SQL*Plus要高,缺点是生成的文件必须在主机上。SQL*Plus可以调整arraysize来提高效率(当然经我实践大数据量时还有内存泄露之虞)。Pro*C是高效的方法,缺点是需要写程序、编译。
硬着头皮看Pro*C咯,好在Tom给了原始代码,抓下来放到一台Linux的机器上proc报错,应该是proc配置include库的问题,找到一个makefile,倒是没啥问题了,但是最后链接失败,报无法识别’sqlca’。到网上一搜,和我一样晕的人还有,要修改代码,多include进,但是看Tom的帖子似乎没提到这个问题,不知道为什么。
下面是修改后的源代码,我顺便在里面修改了会话的一些参数,以处理中文和时间格式:

阅读全文…

分类: Oracle 标签: , ,

Windows Mobile同步利器——SyncMate

2009年6月30日 ern 没有评论

用上了苹果的本子,却还无法把手机换成iPhone,谁让它没CDMA制式的呢?自然也就没有了进一步体验苹果产品整合性的机会。不过咱们Windows Mobile的机器也可以和MAC OS X同步哦,我的要求很简单,能保持通讯录就好,但是SyncMate这款软件还能做得更多。

第一步自然是下载SyncMate进行安装。SyncMate是一个免费软件,也有收费的Expert版本。Expert版本就增加了与更多软件(包括iTunes等)的直接同步功能。不过后面我会提到,其实iTunes可以自己调用通讯录等的,所以免费版本已经满足我了。

安装之后第一次的连接,需要通过USB。启动程序以后,把你的手机插上USB线连接电脑,记得在手机上选择ActiveSync模式,此时你的电脑可能会识别到一个新的网络接口,这是因为手机支持Modem功能,能够让你的电脑通过它上网。现在可以忽略。等待片刻以后会发现你的手机提示你安装软件,这就是SyncMate的客户端了。

客户端装上以后就可以点程序里的Connect了,下面就看图吧。

SyncMate1

SyncMate2

上图就是选择同步通讯录,可以选择双向同步(此时会提示你如何同步),也可以选择电脑至手机或手机至电脑单向。点击“Sync Now”就开始同步了。完成之后打开你电脑的“地址簿”应该就可以看到信息啦。其中包括了人名、电话、公司等多种信息。

顺便说一句,如果你需要同步到你的iPhone/iPod Touch里,那打开iTunes,选择同步地址簿就可以了。地址簿本身也支持导出vCard等等,还是比较强大的。另外SyncMate也支持同步日程、书签等等。

其实也有其他更强大的软件实现Windows Mobile手机的管理,不过这个免费的我觉得也够用了。希望你喜欢。

SQLDeveloper的一些bug

2009年5月6日 ern 没有评论

虽然不搞数据库了,不过最近做些分析的时候还是祭出了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是可以正常打开的。