Oracle数据库表插入

Posted

技术标签:

【中文标题】Oracle数据库表插入【英文标题】:Oracle database table insertion 【发布时间】:2010-12-23 04:43:05 【问题描述】:

我有两张桌子:

create table Number( num number(5));

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

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

【问题讨论】:

您是否希望 Number.num 字段指示条目表中的条目总数?如果是这种情况,那么序列不是您想要的。序列只确保唯一的值。 【参考方案1】:
create sequence entrySeq;

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

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

(您不需要触发器)。

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

【讨论】:

【参考方案2】:

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

这是你应该做的:

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;
/

【讨论】:

这就是为什么Oracle中有序列..使用它们! (或避免使用它们,风险自负。)【参考方案3】:

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

create view number_view
as
select count(*) from Entry

【讨论】:

同意。我认为 OP 没有充分解释这两个表之间的关系。

以上是关于Oracle数据库表插入的主要内容,如果未能解决你的问题,请参考以下文章

oracle表批量插入数据

200万数据oracle导入表要多久

我是一个初学者,如何向oracle数据库表中插入数据

如何在oracle数据库中的表里批量插入记录

请教oracle高手 在oracle里怎么样用一个插入语句插入两表里的数据

Oracle数据库表插入