Linux系统下shell脚本中执行sql

怎么在shell脚本中执行sql?
怎么把sql编程shell脚本放在服务器上自动跑数?
请看正文~

1.Oracle的常用set命令

Oracle的常用set命令:

set pagesize 0 #输出每页行数,缺省为24,为了避免分页,可设定为0。
set linesize 2000 #输出一行字符个数,缺省为80
set head off #数据库查询结果中不显示列标题,而是以空白行代替,也就是不显示字段名了
set termout off #去除标准输出每行的拖尾空格,缺省为off
set trims on  #去掉空字符
set trim on #查询结果既显示于假脱机文件中,又在SQLPLUS中显示;
set feed off # 同set feedback off,显示数量 当查询选择至少n条记录时,查询返回的记录。

set newpage 0;#设置页与页之间的分隔。0时,会在每页的开头有一个小的黑方框;n时,会在页版和页之间隔着n个空行
set space 0; #设置各列间的空格数,默认不用设置、不用写此参数
set line 1000;  #设置行的长度
set echo off;  #显示start启动的脚本中的每个sql命令,缺省为on
set feedback off; #默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
set feedback on;  #设置显示“已选择XX行”
set heading off; #输出域标题,缺省为on;不显示表头信息
set term off; #查询结果仅仅显示于假脱机文件中
set termout off;  #不在屏幕上显示结果
set trimout on; #每一显示行的末端去掉空格
set trimspool on; #去除重定向(spool)输出每行的拖尾空格,缺省为off
set timing off; #显示每条sql命令的耗时,缺省为off
set timing on; #设置显示“已用时间:XXXX”
set time on; #设置显示当前时间
set trimout on; #去除标准输出每行的拖尾空格,缺省为off
set autotrace on; #设置允许对执行的sql进行分析
set colsep' '; #设置分隔符为空格
set numwidth 12;  #输出number类型域长度,缺省为10
set serveroutput on;  #设置允许显示输出类似dbms_output
set verify off;  #可以关闭和打开提示确认信息old 1和new 1的显示.

spool 路径+文件名   #记录数据到路径+文件名
select ... from tablename; #导出数据SQL语句   
spool off   #收集完毕

2. 一个例子

例子:

#设置执行编码格式,防止导出中文时出现乱码
export ORACLE_HOME=/oracle/product/10.2.0/db_1
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
a=`date +%Y%m%d%H%M%S`
b=`date +%Y%m%d`

filename1=lp_0304_$b.xls

echo "begin time:"`date +%Y%m%d%H%M%S` >> /服务器上的log目录路径/lp_0304_$a.log

SQL1=`sqlplus -s 用户名/口令@数据库>/dev/null << END
set pagesize 0
set linesize 2000
set head off
set termout off
set trims on
set trim on
set feed off

......sql

spool $filename1 
select '序号'||chr(9)||'号码'' from dual
union all
select /*+ parallel(a,12)*/
 a.id||chr(9)||
 a.serial_number
  from lp_0304_4 a;
spool off
/

exit;
END`
echo "end time:"`date +%Y%m%d%H%M%S` >> /服务器日志目录/lp0304_$a.log
mv $filename1 /服务器文件目录/file/

可以用下面语句代替上面的某些部分,输出的文件显示不太一样,上面的语句生成的文件字段之间只有一个空格,且会有表头的字段名;下面的语句生成的文件字段之间会有很多空格,且没有字段名

SET NEWPAGE 0; #设置页与页之间的分隔。
SET SPACE 0; #设置各列间的空格数
SET LINESIZE 2000; #输出一行字符个数,缺省为80
SET PAGESIZE 0; #输出每页行数,缺省为24,为了避免分页,可设定为0。
SET ECHO OFF; #显示start启动的脚本中的每个sql命令,缺省为on
SET FEEDBACK OFF;#默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
SET HEADING OFF; #输出域标题,缺省为on;不显示表头信息
SET TERM OFF; #查询结果仅仅显示于假脱机文件中
SET TRIMSPOOL ON; #去除重定向(spool)输出每行的拖尾空格,缺省为off
SET TIMING OFF; #显示每条sql命令的耗时,缺省为off

spool /目录/文件名.txt
......SQL语句......
spool off;

原文地址:https://www.cnblogs.com/lpeng94/p/12780790.html