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