2009-12-04 110 views
1

我有兩個表:Oracle數據庫表中插入

create table Number(num number(5)); 

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

我如何可以增加數表的NUM領域Oracle每當我插入的條目表的東西嗎?

+0

您是否希望Number.num字段指示Entry表中的條目總數?如果是這樣的話,那麼一個序列就不是你想要的。序列只確保一個唯一的值。 – 2009-12-05 05:39:43

回答

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

這就是爲什麼Oracle中有序列..使用它們! (或者避免使用它們,風險自負。) – Thorsten 2009-12-04 10:32:07

2

你是否希望number.num持續表示Entry表中的行數?如果是這樣,您可以將其定義爲視圖:

create view number_view 
as 
select count(*) from Entry 
+0

同意。我認爲這兩張表格之間的關係並沒有完全由選舉委員會解釋。 – 2009-12-05 05:42:25

0
create sequence entrySeq; 

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

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

(你不需要觸發)。

一個序列返回一個唯一且遞增的數值,但Oracle不保證它是無縫的。當有時事務被回滾時,列id的值將包含間隙。