在不使用触发器的情况下在Oracle中自动增量

Lak*_*hmi 22 oracle triggers sequences auto-increment

除了使用触发器之外,在oracle中实现自动增量的其他方法是什么?

Dhe*_*eer 18

您可以创建和使用oracle序列.语法和详细信息请访问 http://www.techonthenet.com/oracle/sequences.php

另请阅读文章 http://rnyb2.blogspot.com/2006/02/potential-pitfall-with-oracle-sequence.html 以了解其他RDBMS中有关AUTONUMBER的限制


ang*_*gus 16

如果您不需要序列号但只需要唯一ID,则可以使用DEFAULT SYS_GUID().即:

CREATE TABLE xxx ( ID RAW(16) DEFAULT SYS_GUID() )
Run Code Online (Sandbox Code Playgroud)


Ton*_*ews 11

从序列中获取下一个值的触发器是实现AUTOINCREMENT等效项的最常用方法:

create trigger mytable_trg
before insert on mytable
for each row
when (new.id is null)
begin
    select myseq.nextval into :new.id from dual;
end;
Run Code Online (Sandbox Code Playgroud)

如果控制插入,则不需要触发器 - 只需使用insert语句中的序列:

insert into mytable (id, data) values (myseq.nextval, 'x');
Run Code Online (Sandbox Code Playgroud)

这可以隐藏在API包中,这样调用者就不需要引用序列:

mytable_pkg.insert_row (p_data => 'x');
Run Code Online (Sandbox Code Playgroud)

但使用触发器更"透明".


Sal*_*007 3

据我回忆,我在 Oracle 的日子里,如果不使用 TRIGGER,就无法实现自动增量列。任何使自动增量列的解决方案都涉及触发和序列(我假设您已经知道这一点,因此没有触发备注)。

  • 当然可以。您创建一个获取 nextval 的 Insert 过程。您撤销对该表的插入并授予对该进程/包的执行权限。无需触发器。 (2认同)
  • 为什么选择这个答案? (2认同)