簡體   English   中英

如何將shell腳本的輸入傳遞給sqlplus?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM