在bash脚本中从sqlplus提示输出

时间:2016-09-22 14:16:15

标签: sqlplus

我在编写bash脚本时遇到了问题。

我正在尝试从sqlplus提示符输出到bash变量。我在很多论坛上都尝试了许多方法。

t=$(./bin/sqlplus 'oracleuser/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))' << END
SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;
 exit;
END
)

echo $t

这正是我想要做的事情。在上面,我正在生成字符串

'oracleuser/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))' 

动态。这部分很有效,当我传递命令

时会出现问题
SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;

在sqlplus提示符下。这里发生的事情是,$符号被转义,但*符号会导致问题(例如在sqlprompt中它列出运行它的目录中的所有文件!)在整个命令运行时。

我的编码如下: -

connect="'oracleuser/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))'"

arr[1]="SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;"

exp=$(./bin/sqlplus $mconnect << END
printf "${arr[1]}";
exit;
END
)

echo $exp

运行脚本时,它成功进入sqlplus,但是当运行SELECT命令*导致问题时,但是如果我手动输入命令就可以了。

有没有更好的方法?我不是一个狂热的怪人:(。

我需要一些真正的帮助!

感谢您花时间查看我的问题。

祝你好运, Bhuvanesh

1 个答案:

答案 0 :(得分:0)

如何将查询作为单独的query1.sql文件运行?

另外,如果你只想要结果(在这种情况下,(1 - (Sum(getmisses)/(Sum(gets)+ Sum(getmisses)))* 100)返回并且没有标题信息,请使用sqlplus -S。

sqlplus -h
  

-S设置静音模式,禁止显示                 SQL * Plus横幅,提示和回显                 命令。

bash.sh:

#/bin/bash
    connect="'oracleuser/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))'"

    exp=$(./bin/sqlplus -S $connect << END
    @query1.sql
    END
    )

echo $exp

QUERY1.SQL:

SET HEAD OFF
SELECT count(*) from all_users;
exit

然后运行示例..

./bash.sh
36