Oracle数据库表插入

发布于 2024-08-13 16:01:59 字数 270 浏览 6 评论 0原文

我有两个表:

create table Number( num number(5));

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

每当我插入时,如何增加 Oracle 中 Number 表的 num 字段条目表中的某些内容?

I have two tables:

create table Number( num number(5));

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

How can I increment the num field of Number table in Oracle whenever I insert something in the Entry table?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清音悠歌 2024-08-20 16:01:59

您应该使用 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;
/

You should use a SEQUENCE instead. The "Number" table is an inherently bad idea, because when two sessions are inserting rows concurrently, each session only sees the uncommited value in the Number table.

This is what you should do instead:

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;
/
叹倦 2024-08-20 16:01:59

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

create view number_view
as
select count(*) from Entry

Do you want number.num to continually represent the number of rows iin the Entry table? If so you could just define it as a view:

create view number_view
as
select count(*) from Entry
妄想挽回 2024-08-20 16:01:59
create sequence entrySeq;

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

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

(您不需要触发器)。

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

create sequence entrySeq;

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

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

(You don't need a trigger).

A sequence returns a unique and increasing number value but Oracle doesn't guarantuee that it is gapless. When sometimes transactions are rollbacked the values of column id will contain gaps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文