(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;