Oracle Insert Select with order by

时间:2015-11-21 08:18:15

标签: sql oracle sql-order-by sql-insert

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

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

4 个答案:

答案 0 :(得分:5)

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

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

insert /*+ append */ into ...
select ...
from   ...
order by ...

只要您接受仅对批量数据有价值的数据,数据将仅加载到高水位线以及存在锁定问题时,对此没有任何无效。

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

答案 1 :(得分:2)

标准Oracle表堆组织表。堆组织表是一个表,其行以无特定顺序存储。

排序与插入行无关。并且完全没有意义。只有在投影/选择行时才需要 ORDER BY

这就是 Oracle RDBMS 的设计方式。

答案 2 :(得分:2)

ORDER BY中使用INSERT SELECT 并非毫无意义,只要它可以更改插入数据的内容,即使用序列{{1}包含在NEXTVAL子句中。即使插入的行在获取时也不会被排序 - 这是访问行时SELECT子句中ORDER BY子句的作用。

对于此类目标,您可以使用<{>}子查询中的SELECT子句进行解决方案,并且可以正常运行:

ORDER BY

答案 3 :(得分:0)

我非常确定Oracle不保证以任何特定顺序向表中插入行(即使行按此顺序插入)。

性能和存储注意事项远远超过订购注意事项(因为每个用户可能对订单有不同的偏好)

为什么不使用&#34; ORDER BY&#34; SELECT语句中的子句?

或者更好的是,创建一个已经包含ORDER BY子句的VIEW?

CREATE VIEW your_table_ordered
SELECT *
FROM your_table
ORDER BY your_column