在Oracle10g上,我们需要将视图中的记录插入到表中,以支持本身没有排序或排序选项的哑巴客户机应用程序。有没有办法控制INSERT语句将记录添加到目标表的顺序?
发布于 2009-08-27 10:02:14
您可以通过not可靠地控制Oracle在没有ORDER BY的情况下检索表的行的顺序。
此外,在没有/*+APPEND*/提示的情况下,Oracle将把行物理地存储在一个有空间的堆表中,这个空间可能不在表的末尾!您可能认为Oracle是按顺序插入它们的,但是任何DML或并发活动(插入2+会话)都可能产生不同的物理组织。
您可以使用INDEX ORGANIZED table按照PK的顺序存储行。此后,该表上的大多数简单查询都将生成一个排序的行集。但是,如果您不指定order BY (根据查询和访问路径,行可以以任何顺序出现),这将不能保证oracle将按该顺序选择行。
您还可以使用带有order by的视图,如果您不能接触应用程序,这可能是您最好的选择(重命名表,使用表的名称创建视图,让应用程序认为它在查询表)。我不知道这在你的情况下是否可行。
发布于 2009-08-27 11:15:46
除非指定ORDER BY,否则永远无法保证Oracle从SELECT返回行的顺序
发布于 2009-08-27 09:56:52
只需使用ORDER BY。就像这样
INSERT INTO table
(
SELECT
column1, column2
FROM
view
ORDER BY
column2
)编辑,这实际上是行不通的。您可以创建一个包含按适当顺序排列的行的临时视图,然后执行插入。
https://stackoverflow.com/questions/1339991
复制相似问题