自動採番

(5.6)

drop table tab1;
create table tab1(col1 int auto_increment primary key,col2 varchar(100));


insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');
insert into tab1(col2) values('A');

select * from tab1 order by col1;

 

方法1. シーケンスによる方法
(12cR1)

drop sequence seq1;
create sequence seq1;

drop table tab1 purge;
create table tab1(col1 int default seq1.nextval primary key,col2 varchar2(100));

insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');
insert into tab1(col2) values('A');

select * from tab1 order by col1;

 

方法2. identity列
(12cR1)

※identity列は内部的にはシーケンスを使用している

drop table tab1 purge;
create table tab1(col1 int generated always as identity primary key,col2 varchar2(100));

insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');
→ORA-32795: GENERATED ALWAYSで作成されたアイデンティティ列には挿入できません
insert into tab1(col2) values('A');

select * from tab1 order by col1;


drop table tab1 purge;
create table tab1(col1 int generated by default as identity primary key,col2 varchar2(100));

insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');
insert into tab1(col2) values('A');

select * from tab1 order by col1;

 

 

方法1. シーケンスによる方法
(9.4)

drop sequence seq1;
create sequence seq1;

drop table tab1;
create table tab1(col1 int default nextval('seq1') primary key,col2 varchar(100));

insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');
insert into tab1(col2) values('A');

select * from tab1 order by col1;


方法2. identity列

(10)

※identity列は内部的にはシーケンスを使用している

drop table tab1;
create table tab1(col1 int generated always as identity primary key,col2 varchar(100));

insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');

ERROR: 列"col1"への挿入はできません
DETAIL: 列"col1"は GENERATED ALWAYS として定義されています。
HINT: OVERRIDING SYSTEM VALUE を指定することで挿入を強制できます。

insert into tab1(col2) values('A');

select * from tab1 order by col1;


drop table tab1;
create table tab1(col1 int generated by default as identity primary key,col2 varchar(100));

insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');

insert into tab1(col2) values('A');

select * from tab1 order by col1;

 

方法3. serial列

(13)
drop table tab1;
create table tab1(col1 serial);

insert into tab1 values(DEFAULT);
select * from tab1;

(2014)


drop table tab1;
create table tab1(col1 int identity(1,1) primary key,col2 varchar(100));

insert into tab1(col2) values('A');
insert into tab1(col2) values('A');
insert into tab1(col1,col2) values(12,'B');

IDENTITY_INSERT が OFF に設定されているときは、テーブル 'tab1' の ID 列に明示的な値を挿入できません。

insert into tab1(col2) values('A');

select * from tab1 order by col1;