查找待执行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