我想知道Oracle表(或列)如何知道使用哪个序列或应用于该特定表(或列)。
答案 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'
/