SQL*PLUSでの表示の制御

spoolでSQLを出力しない方法と標準出力にSQLを出力する方法


外部ファイルのスクリプトを実行する場合

以下のようなコマンドで実行する場合
sqlplus ${USERNAME}/${PASSWORD}@${SID} @tmp.sql

画面へのコマンド出力 画面への検索結果出力 ファイルへのコマンド出力 ファイルへの検索結果出力
デフォルト x o x o
set termout OFF x x x o
SET ECHO ON、set termout OFF x x o o
SET ECHO ON o o o o
  • set termout OFFで画面への出力抑止
  • デフォルトでは実行コマンド非表示
  • 「SET ECHO ON」で実行コマンドを表示
  • デフォルトでは、実行結果を画面に出力
  • 「SET TERMOUT OFF」で実行結果を非表示
  • 「SET SERVEROUTPUT ON」でDBMS_OUTPUT.PUT_LINEからの出力を表示(オマケ)

外部ファイルのスクリプトを実行、サイレントオプションあり

以下のようなコマンドで実行する場合
sqlplus -s ${USERNAME}/${PASSWORD}@${SID} @tmp.sql

画面へのコマンド出力 画面への検索結果出力 ファイルへのコマンド出力 ファイルへの検索結果出力
デフォルト x o x o
set termout OFF x x x o
SET ECHO ON、set termout OFF x x x o
SET ECHO ON x o x o


ヒアドキュメント or 対話形式で実行する場合

以下のようなコマンドで実行する場合
  1. sqlplus ${USERNAME}/${PASSWORD}@${SID} << EOT
  2. sqlplus ${USERNAME}/${PASSWORD}@${SID} << EOT > /dev/null
  3. sqlplus -s ${USERNAME}/${PASSWORD}@${SID} << EOT

画面へのコマンド出力 画面への検索結果出力 ファイルへのコマンド出力 ファイルへの検索結果出力
1. x o o o
2. x x o o
3. x o x o
※setでいろいろ設定しても変わらない


スクリプト実行でかつ「-s」オプションがない場合には、「set echo on」を書くとコマンドの出力が有効になる。この場合「-- 文字列」と、コメントを書くだけで画面表示・ファイル出力可能なので、ちょっとした文字列の出力に便利。

一方「-s」オプションつきでの実行や、ヒアドキュメント化して実行する場合には「set echo on」が使えない。簡単なメッセージを表示したい場合には以下のようにするといい。

SET HEADING OFF
SELECT 'メッセージ内容' FROM dual;
SET HEADING ON

ただし、デフォルトの状態では、結果の前後に空白行が出力される為、やけに改行の多い出力結果になりかねない。これを防ぎたい場合には
SET NEWPAGE NONE
SET FEEDBACK OFF
を追加することで結果の前後の空白行を削除できる。



2011/09/16