在Oracle 10g上,我们需要将视图中的记录插入表中,以支持本身没有sort或ORDER选项的哑客户端应用程序。有什么方法可以控制我们的INSERT语句将记录添加到目标表的顺序?
您 不能 可靠地控制Oracle以何种顺序检索表的行,而不带ORDER BY。
ORDER BY
此外,如果没有/*+APPEND*/提示,Oracle将把这些行实际存储在一个有空间的堆表中,该空间可能不在表的末尾!您可能会认为Oracle会按顺序插入它们,但是任何DML或并发活动(插入2个以上会话)可能会产生不同的物理组织。
/*+APPEND*/
您可以使用INDEX ORGANIZED表按照PK的顺序存储行。此后在该表上进行的大多数简单查询将产生一组已排序的行。 但是,如果您未指定ORDER BY (这取决于查询和访问路径,则行可能会以任何顺序出现),则 这不能保证oracle将按该顺序选择行 。
您还可以使用带有排序顺序的视图,如果您无法触摸应用程序,则这可能是最好的选择(重命名表,使用表名创建视图,让应用程序认为它查询了表)。我不知道您的情况是否可行。