在INSERT SELECT语句期间生成增量数字列值

Igb*_*man 7 sql oracle insert auto-increment

我需要在Oracle中将一些数据从一个表复制到另一个表,同时为新表中的数字列生成增量值.这是一次只进行一次的练习,行数很少(100).

我有足够的解决方案解决这个问题,但我很想知道是否有更优雅的方式.

我正在使用临时序列,如下所示:

CREATE SEQUENCE temp_seq
    START WITH 1;

INSERT INTO new_table (new_col, copied_col1, copied_col2)
    SELECT temp_seq.NEXTVAL, o.*
      FROM (SELECT old_col1, old_col2
              FROM old_table,
          ORDER BY old_col1) o;

DROP SEQUENCE temp_seq;
Run Code Online (Sandbox Code Playgroud)

没有创建序列或任何其他临时对象有没有办法?具体来说,这可以使用自包含的INSERT SELECT语句完成吗?

请将触发器视为非选项.

更多信息:我想控制新行的插入顺序,它与旧表中创建的顺序不一样(注意我上面添加了ORDER BY子句).但我仍然希望我的新顺序列从1开始.

有类似的问题,但我相信我的问题的细节是SO的原创.

Pet*_*ang 10

你可以用ROWNUM.此伪列对结果中的行进行编号:

Insert Into new_table (new_col, copied_col1, copied_col2)
    Select Rownum, old_col1, old_col2
    From old_table;
Run Code Online (Sandbox Code Playgroud)

如果要对记录进行排序,则需要使用子查询:

Insert Into new_table (new_col, copied_col1, copied_col2)
    Select Rownum, old_col1, old_col2
    From (
        Select old_col1, old_col2
        From old_table
        Order By old_col1
    );
Run Code Online (Sandbox Code Playgroud)