2017-09-20 47 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' 
/
相关问题