Oracle数据库表插入

时间:2009-12-04 10:20:21

标签: oracle insert oracle10g auto-increment

我有两张桌子:

create table Number( num number(5));

create table Entry(id number(3), name varchar(50));

每当我在Entry表中插入内容时,如何在Oracle中递增Number表的num字段?

3 个答案:

答案 0 :(得分:8)

您应该使用SEQUENCE代替。 “Number”表本身就是一个坏主意,因为当两个会话同时插入行时,每个会话只能看到Number表中未提及的值。

这是你应该做的事情:

create sequence entrySeq;

create table Entry(id number(3), name varchar(50));

create trigger tr_entry before insert on Entry for each row
begin
  select entrySeq.nextval into :new.number from dual;
end;
/

答案 1 :(得分:2)

您是否希望number.num不断表示Entry表中的行数?如果是这样,您可以将其定义为视图:

create view number_view
as
select count(*) from Entry

答案 2 :(得分:0)

create sequence entrySeq;

create table Entry(id number(3), name varchar(50));

insert into Entry value (entrySeq.nextval, 'MyName'); 

(您不需要触发器)。

序列返回一个唯一且递增的数值,但Oracle并不保证它是无间隙的。当有时回滚事务时,列id的值将包含间隙。