这按预期工作:
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
- 也就是说,仅对最后三个数字进行排序。附注我知道我可以通过用
select * from (...)
包装复合查询来解决这个问题。
虽然当您对空表执行 INSERT-SELECT-ORDER-BY 时可能会出现一些排序,但仅仅由于块的数量,实际上没有任何保证(正如其他人指出的那样)。
如果您确实想对数据的放置位置进行一些控制,那么您需要查看诸如属性集群之类的选项,这些选项仍然在直接模式操作期间应用(插入追加、CTAS、更改表移动)等)。
该功能的演练在这里
或者,对于非直接加载操作,您可以查看预先确定数据物理存储的选项,例如