sqool导出oracle数据

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
原文地址:https://www.cnblogs.com/linn/p/5694321.html