为什么这个sqlplus连接字符串在bash中不起作用?

时间:2017-05-29 16:25:29

标签: bash database-connection sqlplus

我正在尝试连接到服务器上托管的oracle db这里是我的脚本

#!/bin/bash

RAW=`cat sqlTemp.sql`
IFS=";"
exit=" exit;"
for var in $RAW
do
query=$(echo $var | sed  '/^$/d')

sqlplus64 username/pwd@hostname:portnumber/servicename $query  2>> errorLog.txt
ERRORCODE=$?

if [ $ERRORCODE != 0 ]
then
  echo  "$ERRORCODE" >> "errorLog.txt"
      echo  "this query has  error- check the log file for detail"
else
  echo "SUCCESS"     
fi
done

如果我用

替换连接字符串
sqlplus64 -S username/pwd@hostname:portnumber/servicename <<ENDOFSQL
whenever sqlerror exit sql.sqlcode;
$query
exit;
ENDOFSQL

脚本工作。

以前的连接字符串有什么问题以及如何纠正它?

1 个答案:

答案 0 :(得分:0)

两个命令中的连接字符串&#34; username / pwd @ hostname:portnumber / servicename&#34;没有区别。不同之处在于您尝试呈现要执行的SQL命令。失败的命令与有效的命令之间至少有两个重要的区别。

  • 有效的方法使用here文档重定向几行输入,包括你的&#34;查询&#34; string,进入命令的标准输入,而失败的那个在命令行参数中扩展查询字符串,这是完全不同的事情。

  • 当查询字符串在命令行上不加引号时,它在展开后会受到单词拆分的影响,但当它出现在此处的文档中时,它不适用

最有可能的是,sqlplus64命令期望其SQL输入显示在您已经知道如何操作的标准输入上。如果它准备在命令行上接受SQL,那么至少需要引用它,并且可能会有一个命令行选项告诉它在那里查找SQL。