我正在尝试在我的table1中插入如下所示的数据:id,value1,value2 ..
id是主键。我有一个看起来像这样的插入语句:
insert into table1 (id,value1,value2..)
select ([*],value1, value2 ..)
from table2
现在我想从1开始将一个递增的数字插入到table1的id中。我需要写什么*来使这项工作?
答案 0 :(得分:2)
在Oracle 12C中,您可以将id
定义为生成的列。 Here是关于此主题的文章。
在早期版本的Oracle中,我定义了一个序列:
create sequence table1_sequence;
您可以直接在insert
:
insert into table1 (id,value1,value2..)
select table1_sequence.nextval, value1, value2 ..
from table2 ;
或者,我通常做的是创建一个insert
触发器,为任何插入自动设置id
。
如果你只是加载一次表,你可以做得更快更脏:
insert into table1 (id,value1,value2..)
select row_number() over (order by ?), value1, value2 ..
from table2 ;
order by
以防万一您需要特定顺序的ID。
或者,你可以简单地使用:
insert into table1 (id,value1,value2..)
select rownum, value1, value2 ..
from table2 ;
答案 1 :(得分:1)
中没有“auto_increment”或“identity”列 Oracle自Oracle 11g开始。但是,您可以使用a轻松地对其进行建模 序列和触发器:
CREATE SEQUENCE id_seq START WITH 1;
触发定义:
CREATE OR REPLACE TRIGGER table1_tir
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
SELECT id_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
Oracle 12c上提供了IDENTITY列:
create table table1(
id NUMBER GENERATED by default on null as IDENTITY,
value1 VARCHAR2(10),
value2 VARCHAR2(10)
);