web-dev-qa-db-ja.com

SQLPLUSでのSQLスクリプト実行中にテキストをエコーする方法

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
26
glenneroo

スクリプトの先頭で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
24

プロンプトコマンドは、出力にテキストをエコーし​​ます。

Prompt A useful comment.
select(*) from TableA;

次のように表示されます。

SQL> A useful comment.
SQL> 
  COUNT(*)
----------
     0
42
glenneroo

列の名前を変更できるため、「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
1
Ted