Вставка таблицы базы данных Oracle - PullRequest
1 голос
/ 04 декабря 2009

У меня есть две таблицы:

create table Number( num number(5));

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

Как можно увеличить поле num таблицы Number в Oracle всякий раз, когда я вставляю что-либо в таблицу Entry?

Ответы [ 3 ]

8 голосов
/ 04 декабря 2009

Вы должны использовать вместо 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;
/
2 голосов
/ 04 декабря 2009

Вы хотите, чтобы number.num постоянно представляло количество строк в таблице Entry? Если это так, вы можете просто определить его как представление:

create view number_view
as
select count(*) from Entry
0 голосов
/ 04 декабря 2009
create sequence entrySeq;

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

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

(Вам не нужен триггер).

Последовательность возвращает уникальное и увеличивающееся числовое значение, но Oracle не гарантирует, что она без пробелов. Когда иногда транзакции откатываются, значения столбца id будут содержать пробелы.

...