在sqlplus命令中传递变量user,pass,sid

时间:2013-09-23 07:54:34

标签: bash variables oracle11g command-line-arguments sqlplus

我想在我的bash脚本中传递sqlplus命令中的变量,可能会给出答案但对我不起作用。

我试过这样的事情

#!/bin/bash
ssh oracle@10.116.12.26 <<XX
echo Please enter an Oracle Username:
read USERNAME

echo "Please enter the Oracle Username's Password:"
read -s PASS 

SID=XE

export conn_str=$USERNAME/$PASS@$SID

sqlplus $conn_str  << EOF
select * FROM tabs;

exit
EOF
XX

也尝试了

sqlplus $USERNAME/$PASS@SID            #with option -s  and -l

我也找到像this这样的解决方案 但不适合我。

oracle:11g ,os:fedora 18

有没有可用的解决方案? 感谢。

2 个答案:

答案 0 :(得分:1)

你还没有说实际发生了什么,但我猜你不会被提示输入凭证,也许它找不到sqlplus。在Red Hat盒子上,这可以工作:

#!/bin/bash
echo Please enter an Oracle Username:
read USERNAME
echo "Please enter the Oracle Username's Password:"
read -s PASS
SID=XE
conn_str=$USERNAME/$PASS@$SID

ssh oracle@10.116.12.26 << EOF
# set these for your specific environment
ORACLE_HOME=<path to ORACLE_HOME>
PATH=$PATH:$ORACLE_HOME/bin # or without .../bin depending on client
TNS_ADMIN=<path to tnsnames.ora directory, if not default>

sqlplus -s /nolog
connect $conn_str
select * FROM user_tables;
exit
EOF

这是从本地计算机上的用户收集值,以避免“由于stdin不是终端问题而不会分配伪终端”。

然后在远程服务器上设置一次Oracle环境 - 您需要设置的内容取决于您使用的是哪个客户端(特别是您是否正在使用即时客户端,但是如果您正在连接{{ 1}}这似乎不太可能,你可以运行oracle)。

我还调整它以运行带有oraenv的SQL * Plus,然后运行/nolog,因此凭据不会在connect输出中公开。我已经从旧ps切换到更常见的tabs

嵌套的heredocs可以工作但不是必需的;已经在正确的位置输入了SQL命令,SQL * Plus而不是远程shell将会看到它们。

当然,因为我不知道你实际看到的是什么错误,这在很大程度上是猜测。在本地安装客户端并使用SQL * Net连接而不是SSH可能更简单,但可能存在我们不知道的防火墙限制。

答案 1 :(得分:0)

尝试引用此处的doc分隔符,以防止本地计算机上的陈旧变量扩展。

ssh oracle@10.116.12.26 <<'XX'