程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 文章標題Oracle數據庫中dual表使用

文章標題Oracle數據庫中dual表使用

編輯:Oracle教程

文章標題Oracle數據庫中dual表使用


一. 業務場景
業務流程需要進行寫入和更新的比較,所以有原表和歷史表。
要求表中的ID唯一性,以及兩張表的ID關聯,另外後續可能數據庫會進行遷移

二.方案選擇

方案一:id設置為int型自增長。

這種做法編程簡單,無需考慮id唯一性,由數據庫幫忙維護。但是在此業務場景下存在缺點
1. 這裡存在兩張表關聯。id自增長無法確保數據唯一性,也就無法保證原表與歷史表進行數據映射。比如說,現在需要向原表A和歷史表A_HISTORY表中插入相同的一條數據。插入A表後,發現無法取到A表的ID(A表的ID是主鍵,根據其他條件無法確保數據的唯一性)也就無法保證A_HISTORY表與A表能到插入相同的一條數據
2. 因為後期需要進行數據庫的遷移,而ID自增長的。在數據遷移過程中可能會發生錯誤

方案二:利用虛擬表dual表
dual表是系統表,有SYS用戶創建,默認在system表空間下,與用戶表空間分開的。通過在dual表中創建序列既可以進行表ID的唯一性控制。

三.實現
1. 可視化操作
在oracle工具sql developer中。在system表空間schema目錄。建立序列Update_sequence,設置遞進步長,最小值、最大值等。

2.sql 語句

create SEQUENCE Update_sequence
  INCREMENT BY 1 MAXVALUE 5000 CYCLE;

兩種方法都可以創建序列,向表中插入數據時就可以使用
SELECT UPDATE_SEQUENCE.NEXTVAL FROM DUAL
作為原表和歷史表的ID。這樣既保證了id的唯一性,也確保了原表與歷史表的數據能夠映射起來

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved