我需要将查询结果从平面文件中提取出来。有没有办法对结果集进行分区,以便多个线程可以访问它。
我尝试了基于ROWNUM
的分区而没有排序,但是当多个线程ROWNUM
执行相同的查询时,不会保持相同(因为我没有因性能影响而排序)并在输出中创建重复项
答案 0 :(得分:1)
使用ORA_HASH将行拆分为确定性存储区:
select *
from
(
select level, ora_hash(level, 2) bucket
from dual
connect by level <= 10
)
where bucket = 2;
LEVEL BUCKET
----- ------
1 2
3 2
6 2
10 2
它是一个基于0的数字。使用bucket = 0
和bucket = 1
获取其他2套。
答案 1 :(得分:0)
改用ROWID。每条记录的ROWID都是不可变的。或者只使用主键(或具有足够不同值的任何其他字段)来分配子集中的数据。
select *
from table
where SUBSTR(ROWIDTOCHAR(ROWID),-1) IN ('A','a','0');
select *
from table
where SUBSTR(ROWIDTOCHAR(ROWID),-1) IN ('B','b','1');
or
select *
from table
where SUBSTR(ROWIDTOCHAR(ROWID),-1) between 'A' and 'Z';
etc.
你必须尝试一下where子句。据我所知,rownum的最后一个字符可以包含[A-Z] [a-z] [0-9] +和/