더 많은 옵션을 허용하기 위해 기존 SQLPLUS 스크립트의 일부를 쉘 스크립트로 변경하라는 요청을 받았습니다. SQLPLUS 프롬프트 라인에 도달하면쉘 스크립트에서 sqlplus로 입력을 전달하는 방법은 무엇입니까?
#!/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/[email protected]$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
내가이 오류 :
이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
내 쉘 스크립트가 지금처럼 보인다 : 여기
원래 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에서 피드백 에코를 설정하면 처음에. 그러나 줄을 제거하면 스크립트가 멈 춥니 다.
프롬프트를 SQLPLUS에서 완전히 꺼내서 셸 부분에서만 사용해야합니까?
DB 스크립트와 함께 사용하는 트릭 중 하나는 SQL을 생성하고 실행하고자 할 때''sqlplus''를 통해 파이프하는 스크립트를 얻는 것입니다. Python/Perl의 모든 기능을 사용하여 스크립트 생성기가 복잡해질 수 있다는 이점이 있습니다. 그것은''echo rm afile.txt''와 비슷한 것으로서 출력을 확인한 다음''echo rm afile.txt | sh''를 사용합니다. – sotapme