我試圖從Korn shell腳本調用SQL * Plus(10g)腳本。將參數傳遞給包含來自Shell腳本的ACCEPT的SQL * Plus腳本
我不允許修改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正在讀鍵盤(或者同樣愚蠢的東西)而不是stdin。但是,可以肯定的是,你是否嘗試過'echo 7788 | sqlplus ...'?祝你好運。 – shellter 2014-11-03 02:44:20
我已經複製/粘貼了你的代碼,並且在我的結尾運行正常。我也打開了驗證來仔細檢查,參數傳遞正常: '[oracle @ dbsgoel1 gvenzl] $ ./wrapping_shell_script.sh tiger Mon Nov 3 10:50:00 GMT 2014 Enter an empno : ENAME ---------- SCOTT' 隨着覈實: '甲骨文@ dbsgoel1 gvenzl] $ ./wrapping_shell_script.sh虎 週一11月3日十時50分27秒格林尼治標準時間2014 輸入empno:old 3:WHERE TO_CHAR(e.empno)='&abc' new 3:WHERE TO_CHAR(e.empno)='7788' ENAME ---------- SCOTT' – gvenzl 2014-11-03 09:07:15
我建議設置驗證並檢查參數是否成功傳遞。也許通過複製/粘貼sql腳本如果你不允許修改它。 – gvenzl 2014-11-03 09:11:40