【发布时间】:2014-12-29 16:10:04
【问题描述】:
我正在尝试从 Korn shell 脚本调用 SQL*Plus (10g) 脚本。
我不允许修改 SQL*Plus 脚本,它有一个 SQL*Plus ACCEPT 命令。
我正在尝试通过 Korn Shell 脚本将我对这个 ACCEPT 命令变量(下面的7788)的特定参数传递给 SQL*Plus 脚本。
这是一个精简版的 SQL*Plus 脚本,oracle_code.sql:
SET VERIFY OFF
ACCEPT abc PROMPT "Enter an empno:"
SELECT e.ename
FROM emp e
WHERE TO_CHAR(e.empno) = '&abc'
;
这是我尝试使用 Korn shell 脚本 (wrapping_shell_script.sh) 进行调用:
#!/usr/bin/ksh
# wrapping_shell_script.sh
# Expecting one and exactly one parameter to be passed, the password for SCOTT
if [ $# -ne 1 ]
then
echo "USAGE: wrapping_shell_script.sh <SCOTT_Password>"
exit 1
fi
passwd="$1"
echo `date`
sqlplus -s scott/${passwd} @oracle_code.sql << EOF1
7788
EOF1
这是我从 Korn shell 命令行运行 shell 脚本时的样子:
$ wrapping_shell_script.sh tiger
Fri Oct 31 16:23:20 CDT 2014
Enter an empno:
no rows selected
$
我试图传递的 7788 值没有进入 SQL*Plus 脚本的 abc 词法参数。
如何更改我的 Korn shell 脚本,以便传入我指定的值并执行调用的 SQL*Plus 脚本?
谢谢。
【问题讨论】:
-
+1 格式正确的问题!这看起来不错,我的猜测是 sqlplus 正在读取键盘(或同样愚蠢的东西)而不是标准输入。但是,可以肯定的是,您是否尝试过
echo 7788 | sqlplus ...?祝你好运。 -
我已经复制/粘贴了您的代码,它运行良好。我还打开了验证以进行双重检查,并且参数传递正常:
[oracle@dbsgoel1 gvenzl]$ ./wrapping_shell_script.sh tiger Mon Nov 3 10:50:00 GMT 2014 Enter an empno: ENAME ---------- SCOTT验证打开:[oracle@dbsgoel1 gvenzl]$ ./wrapping_shell_script.sh tiger Mon Nov 3 10:50:27 GMT 2014 Enter an empno:old 3: WHERE TO_CHAR(e.empno) = '&abc' new 3: WHERE TO_CHAR(e.empno) = '7788' ENAME ---------- SCOTT -
我建议设置verify on并检查参数是否传递成功。如果您不允许修改它,也许可以通过复制/粘贴 sql 脚本。