より多くのオプションを使用できるように、既存のSQLPLUSスクリプトの一部をシェルスクリプトに変更するように依頼されました。
元の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
私のシェルスクリプトは次のようになります:
#!/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を初めて使用するので、sqlprompt''からechooff Feedbackを設定すると、最初に設定した設定と関係があることがわかります。ただし、行を削除すると、スクリプトがハングします。
プロンプトをSQLPLUSから完全に取り出して、シェル部分でのみ使用する必要がありますか?