我正在使用plsql过程,我正在使用insert-select语句。 我需要以有序的方式插入表中。但我在select sql中使用的顺序不起作用。
在oracle中是否有任何特定的方式以有序的方式插入行?
答案 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