我有兩個表:Oracle數據庫表中插入
create table Number(num number(5));
create table Entry(id number(3), name varchar(50));
我如何可以增加數表的NUM領域Oracle每當我插入的條目表的東西嗎?
我有兩個表:Oracle數據庫表中插入
create table Number(num number(5));
create table Entry(id number(3), name varchar(50));
我如何可以增加數表的NUM領域Oracle每當我插入的條目表的東西嗎?
您應該改用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;
/
這就是爲什麼Oracle中有序列..使用它們! (或者避免使用它們,風險自負。) – Thorsten 2009-12-04 10:32:07
你是否希望number.num持續表示Entry表中的行數?如果是這樣,您可以將其定義爲視圖:
create view number_view
as
select count(*) from Entry
同意。我認爲這兩張表格之間的關係並沒有完全由選舉委員會解釋。 – 2009-12-05 05:42:25
create sequence entrySeq;
create table Entry(id number(3), name varchar(50));
insert into Entry value (entrySeq.nextval, 'MyName');
(你不需要觸發)。
一個序列返回一個唯一且遞增的數值,但Oracle不保證它是無縫的。當有時事務被回滾時,列id的值將包含間隙。
您是否希望Number.num字段指示Entry表中的條目總數?如果是這樣的話,那麼一個序列就不是你想要的。序列只確保一個唯一的值。 – 2009-12-05 05:39:43