我希望找到一个范围内前10个未使用的手动序列号。以下是我的查询:
尽管它提供了所需的输出,但我担心由此查询引起的负载[如果有的话],因为我们将每天多次使用此查询。
请指导是否有优化此查询的方法。
附加信息: 在表Table_Name T2上,定义了一个(seq_number)的唯一索引。
工作示例:
select X1.* From
(Select Rownum seq_number From Dual Connect By Rownum <=
(Select LPAD(9,(UTC.DATA_PRECISION - UTC.DATA_SCALE),9)
From User_Tab_Columns UTC
where UTC.Table_Name = 'Table_Name' And UTC.Column_Name = 'seq_number')) X1,
Table_Name X2
Where X1.seq_number = X2.seq_number (+)
And X2.Rowid is Null
And Rownum <= 10
尽管它提供了所需的输出,但我担心由此查询引起的负载[如果有的话],因为我们将每天多次使用此查询。
请指导是否有优化此查询的方法。
附加信息: 在表Table_Name T2上,定义了一个(seq_number)的唯一索引。
工作示例:
create table TEMP_TABLE_NAME ( seq_number number(6))
insert into TEMP_TABLE_NAME
select distinct trunc(dbms_random.VALUE(1,5000)) seq_number
from dual
connect by rownum <= 1000
create unique index TEMP_TABLE_NAME_IDX on TEMP_TABLE_NAME(seq_Number)
SELECT T1.*
FROM ( SELECT ROWNUM seq_number
FROM DUAL
CONNECT BY ROWNUM <=
(SELECT LPAD (9,(UTC.DATA_PRECISION - UTC.DATA_SCALE),9)
FROM User_Tab_Columns UTC
WHERE UTC.Table_Name = 'TEMP_TABLE_NAME'
AND UTC.Column_Name = 'SEQ_NUMBER')) T1,
TEMP_TABLE_NAME T2
WHERE T1.seq_number = T2.seq_number(+)
AND T2.ROWID IS NULL
AND ROWNUM <= 10
对我而言,我的查询结果如下。表中随机生成的数字包括7和8,因此它们被忽略了。重点是获取前10个未使用的数字。
1
2
3
4
5
6
9
10
11
12
number(6)
表示最多只能有999999行,即不超过1百万。 - krokodilko