WindowsコマンドプロンプトからSQL Plusを介してOracleスクリプトを実行したいと思います。スクリプトには「exit」コマンドが含まれていませんが、SQL Plusを終了して、スクリプトの完了時にコマンドプロンプトに制御を戻したいと思います。私の目標は、これを行うことですなしスクリプトを変更します。これは可能ですか?
別の方法は、バッチファイルでこのコマンドを使用することです。
echo exit | sqlplus user/pass@connect @scriptname
これが最良の解決策であることがわかり、ターミナルまたはスクリプト内で機能します。
echo @scriptname | sqlplus username/password@connect
問題がsqlファイル自体にある可能性があることに気づいたら、sqlplusを終了するように指示する必要があることを認識してください。これを行う方法は次のとおりです。
select * from dual; quit; /
(スラッシュは重要です。これは、sqlplusにその上のステートメットを実行するように指示します。)
ユーザー情報を閉じて終了する最良の方法は次のとおりです。
exit | sqlplus -S user/pwd@server @script.sql
exit
は、sqlplusの出力に提供され、強制的に終了します。 -S
スクリプト内のSQLクエリ以外のすべてのサーバー出力をサポートします。
シェルスクリプトでこれを行うこともできます。
sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF
「;」をエスケープする必要があるかもしれません。とともに \。
はい、それは可能です-SQLPlusを適切に設定するラッパースクリプトを生成し、スクリプトを含めます(つまり、@YourTargetScript.sql
)、次に終了します。
とは言っても、このアプローチはまったくお勧めしません。SQLPlusには、プログラムで使用するための多くの落とし穴があります。過去にOracleを使用するシェルスクリプトを作成するときに、Pythonラッパーを構築しました(より適切なエラー処理動作、stdout/stderr間の出力の正しい分離、ネイティブCSV出力サポート、と他のそのような良いもの)、そしてそれははるかによく働いた。
このような:
sqlplus/nolog userid/password @ tnsname @filename
これをバッチファイルに入れると、制御はそれに続くステートメントで続行されます。
編集:私の悪い、/ nologフラグでもう一度試してください
スクリプトにパスワードを含めることのセキュリティが心配な方のために、AskTomは「外部で識別される」についての記事 http://asktom.Oracle.com/pls/apex/f?p=100:11:0 :::: P11_QUESTION_ID:142212348066
SQLスクリプトにEXITを追加します。これが私のtest.batファイルの例です:
sqlplus user/pwd @ server @ test.SQL> myLOG.LOG
私のtest.sqlファイルは次のとおりです。出口
終了| SQLPLUS/@ @
これは正しい解決策です、私はそれが働いていることを試しました