나는 두 개의 테이블이 있습니다오라클 데이터베이스 테이블 삽입
I는 입력 테이블에 무언가를 삽입 할 때마다 내가 Oracle에 번호 테이블의 num 필드를 증가 수있는 방법create table Number(num number(5));
create table Entry(id number(3), name varchar(50));
?
나는 두 개의 테이블이 있습니다오라클 데이터베이스 테이블 삽입
I는 입력 테이블에 무언가를 삽입 할 때마다 내가 Oracle에 번호 테이블의 num 필드를 증가 수있는 방법create table Number(num number(5));
create table Entry(id number(3), name varchar(50));
?
대신 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;
/
오라클에 시퀀스가 있기 때문에 사용하십시오! (또는 위험을 감수하면서 사용하지 마십시오.) – Thorsten
Entry 테이블의 행 수를 계속 number.num으로 나타내시겠습니까? 그렇다면보기로 정의하면됩니다.
create view number_view
as
select count(*) from Entry
동의합니다. 나는 두 테이블 사이의 관계가 OP에 의해 완전히 설명되었다고 생각하지 않는다. –
create sequence entrySeq;
create table Entry(id number(3), name varchar(50));
insert into Entry value (entrySeq.nextval, 'MyName');
(당신은 트리거가 필요하지 않습니다).
시퀀스는 고유하고 증가하는 숫자 값을 반환하지만 오라클은 gapless임을 보장하지 않습니다. 때때로 트랜잭션이 롤백 될 때 열 id 값에 갭이 포함됩니다.
Entry 테이블의 총 항목 수를 나타내는 Number.num 필드가 필요합니까? 이 경우 시퀀스는 원하는 것이 아닙니다. 시퀀스는 고유 한 값만 보장합니다. –