SqlPlus 批量执行sql脚本

查找待执行sql脚本

targetDir='/c/tangpg/bat/sqls/*.sql'
filelist=`ls ${targetDir}`

将所有sql脚本文件名拼接

files=""
for file in ${filelist}
do
    files=${files}"prompt start insert file:${file}\n"@${file}"\n"
done
  • 在每个文件名前面添加@
  • 在每个文件名前面添加prompt语句,用于输出提示信息
  • 在每个文件名后追加\n或者;

对拼接后字符串转码

使用echo -e将接字符串中的\n转码为回车换行

files=`echo -e ${files}`

执行sqlplus命令

使用EOF将转码后的文件名写入到文档。同时追加数据库相关操作命令。将文档作为sqlplus的输入

sqlplus pass/usr01@oradb <<-EOF
$files 
commit; 
exit; 
EOF

注意EOF段内,行首不可以有空格和缩进,最后的EOF后面不可以有空格

优化脚本输出内容

EOF段内,使用以下命令可以优化执行过程中的输出

set colsep' '; //域输出分隔符
set echo off;//显示start启动的脚本中的每个sql命令,缺省为on
set feedback off;//回显本次sql命令处理的记录条数,缺省为on
set heading off; //输出域标题,缺省为on
set pagesize 0;//输出每页行数,缺省为24,为了避免分页,可设定为0
set termout off; //显示脚本中的命令的执行结果,缺省为on
set trimout on;//去除标准输出每行的拖尾空格,缺省为off
set trimspool on;//去除重定向(spool)输出每行的拖尾空格,缺省为off

完整的脚本文件

targetDir='/c/tangpg/bat/sqls/*.sql'
filelist=`ls ${targetDir}`
files=""

for file in ${filelist}
do
 files=${files}"prompt start insert file:${file}\n"@${file}"\n"
done
files=`echo -e ${files}`

sqlplus pass/usr01@oradb <<EOF
set colsep' ';
set echo off;
set feedback off;
set heading off;
set pagesize 0;
set termout off;
set trimout on;
set trimspool on;
$files 
commit; 
exit; 
EOF
    原文作者:tpglzu
    原文地址: https://www.jianshu.com/p/b3bcd836a6b3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞