1

我有两张桌子:

create table Number( num number(5));

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

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

4

3 回答 3

8

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

这是你应该做的:

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;
/
于 2009-12-04T10:30:41.913 回答
2

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

create view number_view
as
select count(*) from Entry
于 2009-12-04T10:25:49.473 回答
0
create sequence entrySeq;

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

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

(您不需要触发器)。

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

于 2009-12-04T12:29:03.437 回答