我正在尝试连接到服务器上托管的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
脚本工作。
以前的连接字符串有什么问题以及如何纠正它?
答案 0 :(得分:0)
两个命令中的连接字符串&#34; username / pwd @ hostname:portnumber / servicename&#34;没有区别。不同之处在于您尝试呈现要执行的SQL命令。失败的命令与有效的命令之间至少有两个重要的区别。
有效的方法使用here文档重定向几行输入,包括你的&#34;查询&#34; string,进入命令的标准输入,而失败的那个在命令行参数中扩展查询字符串,这是完全不同的事情。
当查询字符串在命令行上不加引号时,它在展开后会受到单词拆分的影响,但当它出现在此处的文档中时,它不适用
最有可能的是,sqlplus64
命令期望其SQL输入显示在您已经知道如何操作的标准输入上。如果它准备在命令行上接受SQL,那么至少需要引用它,并且可能会有一个命令行选项告诉它在那里查找SQL。