这正如预期的那样工作:
select * from table(sys.OdciNumberList(2,1,3))
union all
select * from table(sys.OdciNumberList(5,6,4))
union all
select * from table(sys.OdciNumberList(9,7,8))
order by 1;
字符串
这正如预期的那样工作:
create table q1(id number generated always as identity, val number);
insert into q1 (val)
select * from table(sys.OdciNumberList(2,1,3))
order by 1;
select * from q1 order by id;
型
但不是这个:
create table q3(id number generated always as identity, val number);
insert into q3 (val)
select * from table(sys.OdciNumberList(2,1,3))
union all
select * from table(sys.OdciNumberList(5,6,4))
union all
select * from table(sys.OdciNumberList(9,7,8))
order by 1;
select * from q3 order by id;
型
我得到了以下结果:2 1 3 5 6 4 7 8 9
-也就是说,只有最后三个数字被排序。
我的问题是:为什么它会这样?
P.S.我知道我可以通过用select * from (...)
Package 复合查询来解决这个问题。
1条答案
按热度按时间qyzbxkaa1#
虽然当你在一个空表中执行一个RST-SELECT-ORDER-BY时可能会有一些顺序,仅仅是由于块的填充,实际上没有保证(正如其他人所指出的那样)。
如果你真的想对数据的位置有一些控制,那么你需要看看属性聚类等选项,这些选项仍然在直接模式操作(插入-追加,CTAS,alter table move等)中应用。
该功能的演练在这里
https://youtu.be/UndmvLZ4KSI
或者,对于非直接加载操作,您可以查看预先确定数据物理存储的选项,例如