Oracle Insert Select with order by

lou*_*rdh 4 sql oracle sql-order-by sql-insert

我正在使用plsql过程,我正在使用insert-select语句.我需要以有序的方式插入表中.但我在select sql中使用的顺序不起作用.

在oracle中是否有任何特定的方式以有序的方式插入行?

小智 6

只要可以改变插入数据的内容,即在子句中包含一个序列,在anORDER BY内使用anINSERT SELECT不是毫无意义NEXTVALSELECT。即使在获取时不会对插入的行进行排序,这也是访问行时ORDER BY子句在子句中的作用SELECT

对于这样的目标,您可以使用变通方法将您的ORDER BY子句放在子查询中,它可以工作:

INSERT INTO myTargetTable
(
  SELECT mySequence.nextval, sq.* FROM
    (   SELECT f1, f2, f3, ...fx 
          FROM mySourceTable
         WHERE myCondition
      ORDER BY mySortClause
    ) sq
)
Run Code Online (Sandbox Code Playgroud)


Dav*_*dge 5

有序插入的典型用例是为了在同一块中共同定位特定值(有效地减少了对订购数据的列上的索引的聚类因子).

这通常需要直接路径插入......

insert /*+ append */ into ...
select ...
from   ...
order by ...
Run Code Online (Sandbox Code Playgroud)

只要您接受仅对批量数据有价值的数据,数据将仅加载到高水位线以上,并且存在锁定问题,则没有任何关于此的无效.

另一种实现大致相同效果但更可能更适合OLTP系统的方法是在集群中创建表.