如何改变oracle中select的结果的默认顺序(不加order by)? 100

oracle11g当sql语句中不加orderby的时候,好像是按rowid的顺序返回结果的。我也看过一些相关的文档,oracle的官方意思就是不加orderby,就不保... oracle 11g

当sql语句中不加order by的时候,好像是按rowid的顺序返回结果的。
我也看过一些相关的文档,oracle的官方意思就是不加order by,就不保证输出的顺序。

那么,问题来了:
如果现在我select XXX,一组结果出来,顺序是.......A....B.....
那么接下来我做什么操作,再做同样一句select,怎么才能让结果变成....B...A.....
这个问题我试验了一些操作,比如update,insert,delete一两条数据啊,都不能做到改变两个结果的相对顺序!!!

请回答问题的人自己先做个试验,如果能稳定重复,最终悬赏200分~~~
注意:rowid不是主键,好像是oracle的数据地址。
select XXX不包含order by
还有:操作中请勿修改表的主键。
展开
 我来答
大话残剑
2017-06-26 · TA获得超过2217个赞
知道大有可为答主
回答量:1137
采纳率:56%
帮助的人:703万
展开全部

删除掉原记录,重新插入,通常显示的位置会后移。

这要看B前面是否有可用的块,如果有重新插入的记录仍然在B的前面,可以通过插入足够数量的记录将B前面的可用块占用,然后就会出现在B的后面。

如果不考虑开销,也可以将A删除后重建表,最后插入A。

一个可以重复出现的例子

CREATE TABLE TEST (NAME VARCHAR2(10));
INSERT INTO TEST VALUES('A');
INSERT INTO TEST VALUES('B');
INSERT INTO TEST VALUES('C');
SELECT * FROM TEST;
DELETE FROM TEST WHERE NAME='A';
INSERT INTO TEST VALUES('A');
SELECT * FROM TEST;
DROP TABLE TEST PURGE;
小狂中E
推荐于2017-06-27 · TA获得超过1418个赞
知道大有可为答主
回答量:1514
采纳率:66%
帮助的人:1021万
展开全部
rowid是标识行的唯一性,格式:data object number(6个字符)+relative file number(3个字符)+block number(6个字符)+row number(3个字符)
数据库的理论基础就是集合论,本质上就是无序的,不使用order by(子查询或查询)是不能保证顺序,你把数据不停无序删除再加回估计就能看到这个现象,但大部分时候都是在磁盘上的次序,这跟数据库怎么读数据有关
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chaiyanping
2013-11-25 · 超过33用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:73.3万
展开全部
嵌套使用rowid ,我试过了,应该可以
例如:

select b.rowid ,b.*
from ( select rowid,a.* from 表a ) b
order by b.rowid desc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wjs5398
2013-11-25 · TA获得超过281个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:170万
展开全部
可以明确的告诉你,在不加order by的时候,select的顺序是不能被保证的。所以你只能另改你的需求设计了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Lily0810212
2013-11-25 · 超过24用户采纳过TA的回答
知道答主
回答量:136
采纳率:0%
帮助的人:40.7万
展开全部
oracle数据库是没有默认排序的
要排序必须加上order by
lz的这种情况是一种巧合
因为oracle是按块进行读取数据的
如果数据按顺序存储,则可能使读取出来的数据是按顺
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式