31

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
4

3 に答える 3

52

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

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

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

SQL> A useful comment.
SQL> 
  COUNT(*)
----------
     0
于 2013-11-08T11:52:13.003 に答える
31

これを実現するためにスクリプトの先頭でを使用できますが、代わりに を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 デュアル;

  カウント(1)
----------
     1

SQL>
SQL> SELECT COUNT(1) FROM (SELECT 1 FROM デュアル UNION SELECT 2 FROM デュアル);

  カウント(1)
----------
     2

SQL>
SQL>終了
于 2013-11-07T22:15:58.673 に答える
3

列の名前を変更できるため、「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
于 2016-08-19T18:23:45.170 に答える