SCN_TO_TIMESTAMP

構文

目的

SCN_TO_TIMESTAMPは、引数として、システム変更番号(SCN)と評価される数値を取り、そのSCNに関連付けられた概数のタイムスタンプを戻します。戻り値のデータ型はTIMESTAMPです。このファンクションは、SCNに関連付けられたタイムスタンプを調べる場合に有効です。たとえば、このファンクションをORA_ROWSCN疑似列とともに使用して、行への最新の変更にタイムスタンプを関連付けることができます。

ノート:

  • 結果値の通常の精度は3秒です。

  • SCNとSCN生成時のタイムスタンプの関連は、一定期間データベースで記憶されます。この期間は、最大で自動調整されたUNDO保存期間(データベースが自動UNDO管理モードで実行されている場合)およびデータベース内のすべてのフラッシュバック・アーカイブの保存時間となりますが、120時間以上になります。関連が不要となるまでの経過時間には、データベースが開かれているときの時間のみが加算されます。SCN_TO_TIMESTAMPの引数に対して指定されたSCNが古すぎる場合は、エラーが戻されます。

関連項目:

「ORA_ROWSCN疑似列」および「TIMESTAMP_TO_SCN」を参照してください。

次の例では、ORA_ROWSCN疑似列を使用して行への最新の変更のシステム変更番号を判断し、SCN_TO_TIMESTAMPを使用してそのSCNをタイムスタンプに変換します。

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employees
   WHERE employee_id = 188;

このような問合せを使用して、Oracleフラッシュバック問合せで使用するためにシステム変更番号をタイムスタンプに変換することもできます。

SELECT salary FROM employees WHERE employee_id = 188;
    SALARY
----------
      3800

UPDATE employees SET salary = salary*10 WHERE employee_id = 188;
COMMIT;

SELECT salary FROM employees WHERE employee_id = 188;
    SALARY
----------
     38000
SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employees
   WHERE employee_id = 188;
SCN_TO_TIMESTAMP(ORA_ROWSCN)
---------------------------------------------------------------------------
28-AUG-03 01.58.01.000000000 PM

FLASHBACK TABLE employees TO TIMESTAMP
   TO_TIMESTAMP('28-AUG-03 01.00.00.000000000 PM');

SELECT salary FROM employees WHERE employee_id = 188;  
    SALARY
----------
      3800