Oracle表如何知道它与哪个序列相关联?

时间:2017-09-20 22:24:28

标签: database oracle oracle11g sequence sequences

我想知道Oracle表(或列)如何知道使用哪个序列或应用于该特定表(或列)。

2 个答案:

答案 0 :(得分:5)

据我所知,序列并非系统地与Oracle中的特定表相关联。根据{{​​3}}:

  

如果没有序列,则只能以编程方式生成顺序值。通过选择最近生成的值并递增它,可以获得新的主键值。此方法在事务期间需要锁定并导致多个用户等待主键的下一个值;这种等待被称为序列化。如果开发人员在应用程序中有这样的结构,那么你应该鼓励开发人员用序列访问来替换它们。序列消除了序列化并改善了应用程序的并发性。

因此,应用程序的开发人员需要将每个序列与它们使用的表相关联。通常这是通过使用以某种方式指示它用于什么的名称来完成的。因此,填充emp表的主键的序列可能被称为emp_sequence

答案 1 :(得分:2)

Oracle 12c可以创建一个带有identity子句的列。

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'
/