美文网首页oracle操作
SqlPlus 批量执行sql脚本

SqlPlus 批量执行sql脚本

作者: tpglzu | 来源:发表于2016-07-14 20:31 被阅读0次

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

    相关文章

      网友评论

        本文标题:SqlPlus 批量执行sql脚本

        本文链接:https://www.haomeiwen.com/subject/ghoejttx.html