在oracle中可以找到哪個記錄先輸入,哪個記錄等等?這不一定是記錄的SCN,因爲我不關心確切的時間。我只想按照它們輸入的順序來排列記錄。oracle中記錄的順序
回答
一般而言,除非您有一列提供該信息(例如create_date
)。
如果您可以假定行從未更新並且您的表是使用ROWDEPENDENCIES
構建的,則可以通過ORA_ROWSCN
進行訂購。但是很少有人會有這樣的表格,所以這通常不是特別有用的答案。
這超出了我的理解,但是無法通過['ROWID'](http://docs.oracle.com/cd/B19306_01/server「)返回從_physical_位置推斷行插入的順序。 102/b14200/pseudocolumns008.htm)? – 2014-10-09 18:29:19
@SylvainLeroux - 編號'ROWID'值可以重複用於不同的行,單行的'ROWID'可以隨時間變化,並且稍後分配的區段中行的'ROWID'可以早於'ROWID'先前分配的行。'ROWID'可以在一些非常有限的情況下工作 - 沒有刪除,沒有更新,單個數據庫中的所有數據等等,但是這比'ORA_ROWSCN'有效的可能性更小。 – 2014-10-09 18:33:14
在我與Oracle的多年工作中,我更關注自己開發的邏輯和編碼實踐。在這個特定的情況下,而不是(ab)使用數據庫,這將是一個很好的做法,有兩個DATE
列。一個用於DDL
更改,另一個用於DML
更改。
我通常分別命名COLUMNS
爲DT_TM_STAMP
和DT_TM_STAMP_CRTE
分別爲DML
和DDL
的變化。與datetimestamp列相比,datetimestamp create列不會頻繁更改。因爲,我們都期待DML
活動超過DDL
。在任何時候,如果我們想知道什麼時候是特定記錄inserted
,updated
或deleted
,我們所需要做的就是查找datetimestamp列。
更新我不清楚我對兩個datetime列的解釋。感謝Jeffrey Kemp指出,我所說的全部是DML而不是DDL。
測試用例
有兩列,dt_tm_stamp_crte
存儲行插入的日期時間,和dt_tm_stamp
到keeep所有DML的軌道改變了該行。因此,當插入一行時,兩列的日期時間相同,但是,從下一個DML操作開始,只有dt_tm_stamp
列將使用當前日期時間進行更新。
SQL> alter session set nls_date_format='MM/DD/YYYY HH24:MI:SS';
Session altered.
SQL> DROP TABLE t;
Table dropped.
SQL> CREATE TABLE t AS SELECT * FROM emp WHERE 1 = 2;
Table created.
SQL> ALTER TABLE t ADD (dt_tm_stamp DATE, dt_tm_stamp_crte DATE);
Table altered.
SQL> INSERT INTO t SELECT e.*, SYSDATE, SYSDATE FROM emp e;
14 rows created.
SQL> SELECT ename, dt_tm_stamp, dt_tm_stamp_crte FROM t;
ENAME DT_TM_STAMP DT_TM_STAMP_CRTE
---------- ------------------- -------------------
SMITH 10/10/2014 13:19:53 10/10/2014 13:19:53
ALLEN 10/10/2014 13:19:53 10/10/2014 13:19:53
WARD 10/10/2014 13:19:53 10/10/2014 13:19:53
JONES 10/10/2014 13:19:53 10/10/2014 13:19:53
MARTIN 10/10/2014 13:19:53 10/10/2014 13:19:53
BLAKE 10/10/2014 13:19:53 10/10/2014 13:19:53
CLARK 10/10/2014 13:19:53 10/10/2014 13:19:53
SCOTT 10/10/2014 13:19:53 10/10/2014 13:19:53
KING 10/10/2014 13:19:53 10/10/2014 13:19:53
TURNER 10/10/2014 13:19:53 10/10/2014 13:19:53
ADAMS 10/10/2014 13:19:53 10/10/2014 13:19:53
JAMES 10/10/2014 13:19:53 10/10/2014 13:19:53
FORD 10/10/2014 13:19:53 10/10/2014 13:19:53
MILLER 10/10/2014 13:19:53 10/10/2014 13:19:53
14 rows selected.
SQL> BEGIN
2 DBMS_LOCK.sleep(10);
3 END;
4/
PL/SQL procedure successfully completed.
SQL>
SQL> UPDATE t SET ename = 'LALIT', dt_tm_stamp = SYSDATE WHERE ename = 'SCOTT';
1 row updated.
SQL> SELECT ename, dt_tm_stamp, dt_tm_stamp_crte FROM t WHERE ename = 'LALIT';
ENAME DT_TM_STAMP DT_TM_STAMP_CRTE
---------- ------------------- -------------------
LALIT 10/10/2014 13:20:03 10/10/2014 13:19:53
SQL>
的dt_tm_stamp
列的更新可以通過TRIGGER
來完成。我剛剛展示了列的重要性,如何實現它取決於開發人員。
「DDL變更」是什麼意思,以及它與日期/時間列有什麼關係? – 2014-10-10 06:20:49
除了DML更改之外,該表可能會有添加新列等的修改。因此,此附加日期時間創建列可以跟蹤該列。這只是一個額外的建議。 – 2014-10-10 07:22:39
但這沒有意義。根據定義,任何DDL(例如添加列)都會影響*整個表格 - 因此無論如何它將在每個記錄上具有相同的日期時間值。 – 2014-10-10 07:26:24
- 1. Oracle UNION ALL在查詢中保留記錄的順序
- 2. Postgresql記錄順序
- 3. 在jQuery中記錄點擊的順序?
- 4. 結果集中記錄的順序
- 5. 活動記錄順序
- 6. MySQL查詢(順序記錄...)
- 7. Oracle更新查詢以按順序更新記錄
- 8. 在oracle中記錄plsql表中記錄的新記錄
- 9. 複製oracle中的記錄
- 10. 的記錄順序編號...特定記錄的ID
- 11. 根據T-SQL中多個相關記錄的排序順序排列記錄?
- 12. Realm的奇怪記錄順序
- 13. 順序記錄的嵌套循環
- 14. 從前端更改記錄的順序
- 15. 顯示記錄數的時間順序
- 16. node.js在bunyan的順序日誌記錄
- 17. 記錄事件的調用順序
- 18. Oracle中的時間戳排序順序
- 19. 每週記錄的記錄數 - Oracle SQL
- 20. 將平場映射到順序記錄
- 21. log4j日誌記錄層級順序
- 22. 查找不按順序記錄
- 23. 以特定順序更新記錄
- 24. 記錄歷史/順序按下
- 25. 按條款順序獲取記錄
- 26. 按Mule批次順序處理記錄
- 27. sql - 測試記錄按順序插入
- 28. 以隨機順序顯示記錄
- 29. 如何從oracle中已有記錄的表中找到記錄?
- 30. 遞歸記錄oracle
您可能最終會找到一些_trick_來實現您的目的。 *但是*在一般情況下,您肯定應該將表格內容視爲*無序集合*。如果您需要以某種特定順序檢索行,則必須提供必要的信息作爲_your_數據的一部分。最終它可以在「幕後」自動生成(例如使用「序列」)。 – 2014-10-09 17:46:19
作爲一種良好做法,始終有兩個「DATE」列。一個用於'DDL'變化,另一個用於'DML'變化。 – 2014-10-09 17:52:36