不同模式中的查询返回的行顺序是不同的

时间:2014-08-24 07:49:29

标签: sql database oracle10g database-schema

我使用的是Oracle数据库10g企业版10.2.0.3.0版 - 64位。 我创建并在表中插入了一些日期"转移"有字段

tsid(数字,主键),  name(varchar 2(20)),  desc(varchar 2(30)),  数量(数量),  日期(时间戳)。

我有另一个具有相同表格和字段的模式SHE。 我使用以下查询将数据复制到SHE模式

    INSERT INTO SHE.TRANSFERS ( SELECT * FROM HE.TRANSFERS );

在架构HE和SHE中查询表时,我得到的日期是不同的顺序。

    select * from transfers;

如何在两个模式中以相同的顺序获取行?

请解释一下数据库行排序。

2 个答案:

答案 0 :(得分:2)

您需要使用ORDER BY并选择代表订单的列。如果您没有请求查询结果,则不会以任何特定方式对其进行排序。这就是SQL的工作原理......

答案 1 :(得分:1)

ROWID与Oracle中行的排序之间存在关联。

如此Oracle Documentation Link中所述,行ID在表的级别上是唯一的。但是,正如我的朋友在下面的评论中所提到的,如果您没有指定Order by clause,则无法保证行的顺序与RowId顺序相同。我知道的一个原因是:

如果您使用的是索引,则索引表中的 RowID 会有所不同,因此在这种情况下对ROWID进行排序[可能]会为您提供不同的订单数据"没有索引选择,或者如果使用不同的索引集"。

测试RowID订单:

如果您尝试了以下语句:SELECT MIN(ROWID) FROM YOUR_TABLE A,它会为您提供表格中插入的第一个ROWID。

这解释了为什么您插入的数据顺序可能与您从中选择此数据的表不同。

见下图:

enter image description here