Oracle
使用 oracle 數據庫在送出時獲取目前時間
插入行時,我想創建一列,等於目前送出時間。
如果我在列上使用預設值 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 中我會
- 為更新的每一行收集 ROWID
- 在“真實”送出之前獲取系統時間戳
- 通過收集的 rowid 使用上一個時間戳更新記錄
- 再次送出
但正如評論中所說
對此有什麼業務需求?
它有一個很大的缺陷,它會為相同的記錄送出兩次,因此每次執行都會生成幾乎雙倍的重做日誌。