sqool导出oracle数据

set colsep '|'               --设置|为列分隔符 
set echo off --在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句
set feedback off --是否显示当前sql语句查询或修改的行数
set newpage none --会在页和页之间没有任何间隔
set verify off --
set pagesize --分多少页
set term off --在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
set trims on --将SPOOL输出中每行后面多余的空格去掉
set linesize --设置屏幕显示行宽,默认100
set heading off --禁止输出列标题
set timing off --默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能
set numwidth
SPOOL D:\aaa.txt
select UserTelNo || ',' || to_char(ReceiveTime,'yyyy-MM-dd HH24:MI:SS') || ',' || UserContent || ',' || ReplyContent FROM LogSMSHall_Mutual WHERE rownum<=;
SPOOL OFF

问题是不能做循环,不能执行存储过程

如果在shell中执行,会把sql语句也输出到结果

./sqlplus 用户名/密码@dbm < /data/temp/export.sql

这时候我们就需要执行删除带“SQL)”开头的行,保证文件只有数据

sed -i '/^SQL>.*/d'  aaa.csv 

如果编码NLS_LANG设置和oracle服务器不一致,会有乱码

[root@localhost bin]# cat ~/.bash_profile
# .bash_profile # Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi # User specific environment and startup programs PATH=$PATH:$HOME/bin:/etc/redis/redis-3.0./src export PATH # LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/oracle/12.1/client64/lib
export ORACLE_HOME=/usr/lib/oracle/12.1/
export TNS_ADMIN=/usr/lib/oracle/12.1/client64/network/admin
export NLS_LANG=American_China.ZHS16GBK
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib:$AGENT_HOME/lib

导出后,可以转化编码(安装iconv)

iconv -f GBK -t UTF- aaa.csv -o aaa.csv2
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar zxvf libiconv-1.15.tar.gz
cd libiconv-1.15
./configure --prefix=/usr/local/libiconv
makey & make install
上一篇:input输入框输入大小写字母自动转换


下一篇:NDK(22)JNI编程如何避免常见缺陷