[英]How to pass input from shell script to sqlplus?
我被要求將現有SQLPLUS腳本的一部分更改為shell腳本以允許更多選項。
以下是原始SQLPLUS腳本提示的內容:
SPOOL results.txt;
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
PROMPT
PROMPT This script upgrades the database to the most recent version of eV8.0.
SET VERIFY OFF;
SET SERVEROUTPUT ON;
ACCEPT continue_flag CHAR PROMPT 'Are You ready to continue Y/N? '
PROMPT
我的shell腳本現在看起來像:
#!/bin/sh
echo "Please enter database username"
read eval_user
echo "Please enter database password"
read eval_pass
echo "Please enter the database name"
read db_name
$ORACLE_HOME/bin/sqlplus -s /nolog <<-EOF >> ${LOGFILE}
connect $eval_user/$eval_pass@$db_name
set serveroutput on format wrapped
set pages 0 lines 300 trimout on trimspool on
set echo off feedback off sqlprompt ''
SPOOL results.txt;
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
PROMPT
SET VERIFY OFF;
SET SERVEROUTPUT ON;
ACCEPT continue_flag CHAR PROMPT 'Are You ready to continue Y/N? '
PROMPT
到達SQLPLUS提示行時出現此錯誤:
Are You ready to continue Y/N? You have entered an invalid response. Exiting.
BEGIN
*
ERROR at line 1:
ORA-06501: PL/SQL: program error
ORA-06512: at line 13
我是sqlplus的新手,所以我知道這與我在開頭設置的設置有關,如果我設置echo關閉sqlprompt''的反饋。 但是,在刪除該行時,腳本就會掛起。
我應該完全從SQLPLUS中提取提示並僅在shell部分中使用它嗎?
最簡單的方法是保持與sql腳本的交互。 它確實想要閱讀你目前沒有給出的東西。 這里的文檔是傳遞變量的好方法。 不要忘記它對shell特殊字符的影響......一如既往,還有更多方法可以做到這一點。
但是,是的,您的問題的答案是:是的,采取交互,並在調用shell中准備決策。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.