2017-09-20 79 views
2

我想知道Oracle表(或列)如何知道哪個序列被使用或應用於該特定表(或列)。Oracle表如何知道它與哪個序列關聯?

+0

此前12C,序列不相關聯的表,因此該表不知道用哪個序列。 12c引入了在標識列和默認約束中使用序列的選項。這些信息應該在數據字典中提供。 –

+0

@ShannonSeverance:我對甲骨文相當陌生。發生有一個如何工作的鏈接? –

+0

@JonEricson https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#CJAECCFH – mathguy

回答

5

據我所知,序列不是系統地與Oracle中的一個特定表關聯。根據the documentation

沒有序列,序列值只能以編程方式產生。通過選擇最近生成的值並將其遞增,可以獲得新的主鍵值。此方法在事務期間需要鎖定,並導致多個用戶等待主鍵的下一個值;這個等待被稱爲系列化。如果開發人員在應用程序中有這樣的結構,那麼您應該鼓勵開發人員將他們替換爲序列的訪問。序列消除了序列化並提高了應用程序的併發性。

因此,應用程序的開發人員需要將每個序列與它們所用的表相關聯。通常這是通過使用名稱來完成的,該名稱以某種方式指出了它的用途。因此,填充emp表主鍵的順序可能被稱爲emp_sequence

2

Oracle 12c可以創建一個帶有身份子句的列。

create table MY_TABLE(
    ID number generated always as identity 
) 
/

這會創建一個與該列關聯的序列。您可以查詢視圖ALL_TAB_IDENTITY_COLS找出序列的系統生成的名稱:

select owner, sequence_name 
from ALL_TAB_IDENTITY_COLS 
where owner='MY_SCHEMA' 
and table_name='MY_TABLE' 
and column_name='MY_COLUMN' 
/
相關問題