文章標題 Oracle資料庫中dual表使用

2021-06-29 14:57:50 字數 941 閱讀 6187

一. 業務場景

業務流程需要進行寫入和更新的比較,所以有原表和歷史表。

要求表中的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的唯一性,也確保了原表與歷史表的資料能夠對映起來

資料庫 Oracle中建立資料庫

create database lihua 網上的說法是 oracle中的例項只對應乙個資料庫,出現此種情況說明oracle資料庫處於mount 裝載 或open狀態,需要使用startup nomount語句進行狀態更改,或者是直接使用dbca的圖形介面來建立 注 經測試,startup nomo...

資料庫文章集合

configuring dtc to work through a firewall ms support 文 sql 儲存過程分頁 2004 文 ado.中資料庫連線方式 微軟提供 微軟 文 yukon and the clr srinivas sampath 文 sql server 與acce...

oracle資料庫中sql notfound的用法

sql notfound 是乙個布林值。與最近的sql語句 update,insert,delete,select 發生互動,當最近的一條sql語句沒有涉及任何行的時候,則返回true。否則返回false。這樣的語句在實際應用中,是非常有用的。例如要update一行資料時,如果沒有找到,就可以作相應...