我一直在寻找一种在Oracle中定义自动增量数据类型的方法,并在Stack Overflow上找到了这些问题:
使用自动增量类型的方法包括定义一个序列和一个触发器,使插入透明,插入触发器看起来如此:
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;
我对此触发器的行为有疑问:
我希望触发器插入新行,序列的下一个值作为ID,无论“new.id”的提供值是什么。我想WHEN语句使触发器只在所提供的ID为NULL时插入新行(并且它不会插入,否则将失败)。
我是否可以删除WHEN语句,以便始终使用序列的下一个值插入触发器?
答案 0 :(得分:2)
WHEN条件指定触发器必须为TRUE才能触发。在此示例中,只有在新行具有NULL IS时才会触发触发器。当ID不为null时,触发器不会触发,因此插入语句中给出的任何值ID都将保持不变。
是的,如果您只是删除WHEN条件,那么触发器将始终触发,因此将始终为ID提供序列值。
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以使用2种方法:
如果表格如下:
create table my_test (
id number,
my_test data varchar2(255)
);
你的序列就是这样:
create sequence test_seq
start with 1
increment by 1
nomaxvalue;
你可以像这样创建一个触发器(没有像Tony Andrews那样的When语句)
create trigger test_trigger
before insert on my_test
for each row
begin
select test_seq.nextval into :new.id from dual;
end;
或者您可以只使用它,然后您不需要触发器:
insert into my_test values(test_seq.nextval, 'voila!');