在Unix工作的Oracle提示符上执行SQL查询,但不在shell脚本中执行

时间:2013-11-01 10:13:28

标签: oracle sqlplus ksh

我正在尝试使用ksh脚本连接到Oracle数据库。当我直接从提示符运行它时,它可以工作。但是当我把它放在一个脚本(abc.sh)中时,它失败了。下面是我在脚本中添加的内容(编辑后缩短):

这里abc是用户名,而abc $ 123是有权访问数据库DBNAME的用户的密码。

 #!/usr/bin/ksh

 sqlplus -s /nolog << EOF > output
 connect abc/abc$123@DBNAME;

 set echo off
 set heading off

 select table_name from dba_tables;
 exit;
 EOF

如果直接输入,但是以./abc.sh运行,则会产生错误 -

 ERROR ORA-01017: invalid username/password; logon denied

我确定我错过了一些简单的东西,但无法弄清楚这一点。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您不能只编写这样的代码并期望将其传递给相关程序。您的SQL行由KSH而不是您的SQL服务器执行。相反,你需要做更多的事情:

echo "SQL CODE HERE" | sqlplus ....