Oracle

使用 oracle 數據庫在送出時獲取目前時間

  • March 11, 2019

插入行時,我想創建一列,等於目前送出時間。

如果我在列上使用預設值 sysdatetime,它會使用插入時的目前時間(這可能與送出時間有很大不同)。如果我使用插入觸發器,它會再次使用插入時間 - 而不是實際送出。

是否有任何可能的解決方案可以通過 oracle 獲得目前時間?

要獲得近似值(+/- 3 秒左右),您可以使用ORA_ROWSCN

您必須使用ROWDEPENDENCIES定義表,以便為每一行儲存 SCN。

這裡有一個簡單的例子:

create table t1 
(c1 number,
c2 date)
ROWDEPENDENCIES;

insert into t1 values(1,sysdate);
-- wait 5 sec
commit;

insert into t1 values(2,sysdate);
-- wait 10 sec
commit;

SELECT ORA_ROWSCN, SCN_TO_TIMESTAMP(ORA_ROWSCN), c1,c2 FROM t1;


ORA_ROWSCN SCN_TO_TIMESTAMP(ORA_ROWSCN)         C1 C2                
---------- ---------------------------- ---------- -------------------
  1.4E+13 19.05.16 19:14:15,000000000           1 19.05.2016 19:14:09 
  1.4E+13 19.05.16 19:14:30,000000000           2 19.05.2016 19:14:21 

在 PL/SQL 中我會

  1. 為更新的每一行收集 ROWID
  2. 在“真實”送出之前獲取系統時間戳
  3. 通過收集的 rowid 使用上一個時間戳更新記錄
  4. 再次送出

但正如評論中所說

對此有什麼業務需求?

它有一個很大的缺陷,它會為相同的記錄送出兩次,因此每次執行都會生成幾乎雙倍的重做日誌。

引用自:https://dba.stackexchange.com/questions/139020