尝试插入一些数据和一个递增的数字作为id(oracle db)

时间:2018-04-20 11:14:38

标签: sql oracle insert

我正在尝试在我的table1中插入如下所示的数据:id,value1,value2 ..

id是主键。我有一个看起来像这样的插入语句:

insert into table1 (id,value1,value2..)
    select ([*],value1, value2 ..) 
    from table2 

现在我想从1开始将一个递增的数字插入到table1的id中。我需要写什么*来使这项工作?

2 个答案:

答案 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)
 );