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)
| 归档时间: |
|
| 查看次数: |
10201 次 |
| 最近记录: |