首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle上使用ORDER插入

在Oracle上使用ORDER插入
EN

Stack Overflow用户
提问于 2009-08-27 09:47:42
回答 5查看 13.2K关注 0票数 2

在Oracle10g上,我们需要将视图中的记录插入到表中,以支持本身没有排序或排序选项的哑巴客户机应用程序。有没有办法控制INSERT语句将记录添加到目标表的顺序?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-27 10:02:14

您可以通过not可靠地控制Oracle在没有ORDER BY的情况下检索表的行的顺序。

此外,在没有/*+APPEND*/提示的情况下,Oracle将把行物理地存储在一个有空间的堆表中,这个空间可能不在表的末尾!您可能认为Oracle是按顺序插入它们的,但是任何DML或并发活动(插入2+会话)都可能产生不同的物理组织。

您可以使用INDEX ORGANIZED table按照PK的顺序存储行。此后,该表上的大多数简单查询都将生成一个排序的行集。但是,如果您不指定order BY (根据查询和访问路径,行可以以任何顺序出现),这将不能保证oracle将按该顺序选择行。

您还可以使用带有order by的视图,如果您不能接触应用程序,这可能是您最好的选择(重命名表,使用表的名称创建视图,让应用程序认为它在查询表)。我不知道这在你的情况下是否可行。

票数 12
EN

Stack Overflow用户

发布于 2009-08-27 11:15:46

除非指定ORDER BY,否则永远无法保证Oracle从SELECT返回行的顺序

票数 5
EN

Stack Overflow用户

发布于 2009-08-27 09:56:52

只需使用ORDER BY。就像这样

代码语言:javascript
复制
INSERT INTO table
(
SELECT 
      column1, column2
FROM 
      view
ORDER BY 
      column2
)

编辑,这实际上是行不通的。您可以创建一个包含按适当顺序排列的行的临时视图,然后执行插入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1339991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档