后记:
用了100万的数据做了测试,发现spool的效率还是堪忧,要是数据量小的话用spool没什么问题,也比较简单,但是数据量稍微大一些就不行了。用spool导出100万条数据用时在2分钟左右,用UTL_FILE开游标来写得话只要40多秒。快了一倍。(生产用了5亿数据验证。速度不止一倍,所以,如果不是写日志,还是用游标来写吧)
以上导出来的是分隔符文件,如果想要定长文件(就是表中的字段长度是多少就导出多少,不够的补齐空格或者指定字符。)
那就需要用rpag和lpag-->一个是右补齐。一个是左补齐。
用法:rpad(nvl(v_rec.字段名,' '),字段长度,' ')
spool导出文件
最近有个任务,需要将库中数据导出给下游,然后看到别的开发人员用的都是游标PUTLINE之类的,之前看到有历史程序是用spool的,所以今天就用spool来导数了。
其实我觉得用spool还是很方便的,废话不多说,直接干。
需要两个文件,
export.sh export_user.sql
因为是要把user表中的所有数据或者一些数据整合导出成一个文件,所以sql文件内容就是查询,将所有需要的数据查出来然后整合拼接成想要的样子。本次导数只是要求用‘^’符号作为分隔符,编码格式要求是utf8。
sql文件如下:
select id||'^'||name||'^'||a