SqlplusでSQLスクリプトを実行し、出力をログファイルに送信するバッチファイルがあります。
sqlplus user/pw <RowCount.sql> RowCount.log
私のログファイルにはこれが含まれています:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL> SQL>
COUNT(*)
----------
0
SQL>
COUNT(*)
----------
0
など。ただし、出力は数千行であるため、どの結果がどのステートメントに属しているかを判断するのは困難です。
何が起こったのか見分けられるように、出力にフォーマットを追加したいと思います。実行されたステートメントのエコーまたはスクリプトにいくつかの「エコー」ステートメントを手動で挿入することは問題ありません。理想的には次のようになります。
SQL> select(*) from TableA;
COUNT(*)
----------
0
SQL> select(*) from TableB;
COUNT(*)
----------
0
スクリプトの先頭でSET ECHO ON
を使用してそれを実現できますが、@
の代わりに<
を使用してスクリプトを指定する必要があります(EXIT
も追加する必要がありました)最後に):
test.sql
SET ECHO ON
SELECT COUNT(1) FROM dual;
SELECT COUNT(1) FROM (SELECT 1 FROM dual UNION SELECT 2 FROM dual);
EXIT
端末
sqlplus hr/Oracle@orcl @/tmp/test.sql > /tmp/test.log
test.log
SQL> SQL> SELECT COUNT(1)FROM dual; COUNT(1) ---------- 1 SQL> SQL> SELECT COUNT(1)FROM(SELECT 1 FROM dual UNION SELECT 2 FROM dual); COUNT (1) ---------- 2 SQL> SQL> EXIT
プロンプトコマンドは、出力にテキストをエコーします。
Prompt A useful comment.
select(*) from TableA;
次のように表示されます。
SQL> A useful comment.
SQL>
COUNT(*)
----------
0
列の名前を変更できるため、「COUNT(*)」の代わりに何か意味のあるものを使用できます。そのためには、「RowCount.sql」スクリプトを更新する必要があります。
例えば:
SQL> select count(*) as RecordCountFromTableOne from TableOne;
次のように表示されます。
RecordCountFromTableOne
-----------------------
0
タイトルにスペースが必要な場合は、二重引用符で囲む必要があります
SQL> select count(*) as "Record Count From Table One" from TableOne;
次のように表示されます。
Record Count From Table One
---------------------------
0