atsukanrockのブログ

Microsoft系技術を中心にぼちぼち更新します

SQL*Plus上でタイムスタンプを取得する

はじめに

Oracleサーバの管理をする際に、クライアントがSQL*Plusしかないことがよくある。SQL*Plusでは、実行タイムスタンプを取得するコマンドがなく、作業ログをファイル出力する際などに困る。本エントリでは、SQL*Plus上で実行タイムスタンプを取得する方法を示す。

手順の見方

  • (※)‥インスタンスに接続している必要がある箇所
  • 「.」が2つ並んでいる箇所があるが、タイプミスではなく、SQL*Plusの仕様。変数が「&」から始まり「.」で終わる

_DATE事前定義変数を使う方法(おそらく正統派)

1. NLS_DATE_FORMATを変更する(※)
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDD_HH24MISS';
2. _DATE事前定義変数を使う(※)
SQL> SPOOL hoge-&_DATE..log

COLUMNコマンドを使う方法(おそらくトリッキー)

1. COLUMNコマンドで、SELECT文実行結果の列値をユーザー変数に格納するよう指定する
SQL> COL WORK_DATE_TIME NEW_V V_WORK_DATE_TIME
2. 現在日時をSELECTする(※)
SQL> SELECT TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') AS WORK_DATE_TIME FROM DUAL;
3. ユーザー変数を使う
SQL> SPOOL hoge-&V_WORK_DATE_TIME..log