在shell脚本中连接到sqlplus并运行SQL脚本

frebpwbc  于 2023-08-07  发布在  Shell
关注(0)|答案(6)|浏览(124)

我有一个.sql文件,它是一堆oracle pl/sql命令,我想创建一个shell脚本来运行这些命令。
假设user/pass@server是我的凭据。执行这样的任务的shell脚本是什么?

rwqw0loc

rwqw0loc1#

举例来说:

sqlplus -s admin/password << EOF
whenever sqlerror exit sql.sqlcode;
set echo off 
set heading off

@pl_script_1.sql
@pl_script_2.sql

exit;
EOF

字符串

gk7wooem

gk7wooem2#

从安全Angular 来说,类似这样的东西不是更好吗?:

sqlplus -s /nolog << EOF
CONNECT admin/password;

whenever sqlerror exit sql.sqlcode;
set echo off 
set heading off

@pl_script_1.sql
@pl_script_2.sql

exit;
EOF

字符串

iklwldmw

iklwldmw3#

如果您想将输出重定向到日志文件以查找错误或其他内容。你可以这样做。

sqlplus -s <<EOF>> LOG_FILE_NAME user/passwd@host/db
#Your SQL code
EOF

字符串

vzgqcmou

vzgqcmou4#

这应处理以下问题:
1.当SQLERERROR退出时SQL.SQLCODE

  1. SPOOL ${SPOOL_FILE}
    1.$RC返回oracle的退出代码
    1.$SPOOL_FILE中的cat解释了错误
SPOOL_FILE=${LOG_DIR}/${LOG_FILE_NAME}.spool 

SQLPLUS_OUTPUT=`sqlplus -s  "$SFDC_WE_CORE" <<EOF 
        SET HEAD OFF
        SET AUTOPRINT OFF
        SET TERMOUT OFF
        SET SERVEROUTPUT ON

        SPOOL  ${SPOOL_FILE} 

        WHENEVER SQLERROR EXIT SQL.SQLCODE
        DECLARE 

        BEGIN
           foooo 
        --rollback; 
        END;
    /
    EOF` 

RC=$?

if [[ $RC != 0 ]] ; then

    echo " RDBMS exit code : $RC  "     | tee -a ${LOG_FILE}
    cat ${SPOOL_FILE}                   | tee -a ${LOG_FILE}

    cat ${LOG_FILE} | mail -s "Script ${INIT_EXE} failed on $SFDC_ENV" $SUPPORT_LIST

    exit 3

fi

字符串

2j4z5cfb

2j4z5cfb5#

这里的一些其他答案启发我编写了一个脚本,用于使用SQLPLUS沿着shell命令为项目自动化SQL任务的混合顺序执行,这个过程以前是手动完成的。也许这个(高度净化的)例子对其他人有用:

#!/bin/bash
acreds="user_a/supergreatpassword"
bcreds="user_b/anothergreatpassword"
hoststring='fancyoraclehoststring'

runsql () {
  # param 1 is $1
sqlplus -S /nolog << EOF
CONNECT $1@$hoststring;
whenever sqlerror exit sql.sqlcode;
set echo off
set heading off
$2
exit;
EOF
}

echo "TS::$(date): Starting SCHEM_A.PROC_YOU_NEED()..."
runsql "$acreds" "execute SCHEM_A.PROC_YOU_NEED();"

echo "TS::$(date): Starting superusefuljob..."
/var/scripts/superusefuljob.sh

echo "TS::$(date): Starting SCHEM_B.SECRET_B_PROC()..."
runsql "$bcreds" "execute SCHEM_B.SECRET_B_PROC();"

echo "TS::$(date): DONE"

字符串
runsql允许您将凭证字符串作为第一个参数传递,并将所需的任何SQL作为第二个参数传递。包含凭证的变量是为了进行说明,但为了安全起见,我实际上从另一个文件中获取它们。如果您想处理多个数据库连接,您可以很容易地修改该函数以接受主机字符串作为附加参数。

piah890a

piah890a6#

echo“exit”|echo“SELECT table_name FROM all_tables FETCH FIRST 10 ROWS ONLY;”|sqlplus admin/password > outputFile.log

相关问题