在 shell 脚本中注入 SQL 脚本

问题描述 投票:0回答:1

在我的 docker 容器中,我正在尝试 -

  1. 在 sqlplus 中停止数据库
  2. 在特定目录下运行命令
  3. 重新启动数据库

下面是我正在尝试的示例脚本,但它给我错误,例如找不到命令。 请帮我解决这个

#!/bin/bash

if [[ $(sqlplus -L sys/$TIA_SYS_PWD@tia as sysdba <<< "select * from v\$option where PARAMETER = 'Unified Auditing';" | grep FALSE) == *FALSE* ]]; then
     sqlplus -L -S  / as sysdba <<< "shutdown immediate"
     cd $ORACLE_HOME/rdbms/lib; make -f ins_rdbms.mk uniaud_on ioracle
     sqlplus -L -S / as sysdba <<< "startup"
     sqlplus -L sys/$TIA_SYS_PWD@tia as sysdba <<< "select * from v\$option where PARAMETER = 'Unified Auditing';"
else
     echo "Unified Auditing already enabled"   
fi
sql bash shell sqlplus
1个回答
1
投票

通常,从 bash 脚本与数据库对话的最佳方式是使用 HERE 文档

https://tldp.org/LDP/abs/html/here-docs.html

例如

sqlplus ... <<EOF
   whenever sqlerror exit sql.sqlcode;
   [QUERY]
   exit;
EOF

if [ $? -ne 0 ]; then
   # [QUERY] returned an error
fi

您将需要 heredoc 中的命令行参数和“设置”调用以适合您的特定用例,但whenever sqlerror 子句可用于检查脚本中 sql 语句的返回码。

这不仅适用于 sqlplus,还适用于许多其他类型的数据库引擎。

© www.soinside.com 2019 - 2024. All rights reserved.