SQL Oracle,数字列数据中的下一个空闲数字

Fer*_*ito -2 sql oracle

我有一个带有数字列的表。有数据记录,以示例 { 1,7, 10, 11, 12, 19, 20} 为例。我想使用 SQL 从特定 x 获取下一个“空闲”号码:

>8 for x=7  
>8 for x=8  
>13 for x=10  
>21 for x=20
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

好的:我想插入带有“x”的内容。该列是唯一的,因此当表中已经有“7”时,我无法将 x=7 的内容放入表中。所以我想要一个例程,如果已经存在带有“7”的记录,则返回“8”。如果已经有“8”,则为“9”。

在伪 SQL 中:

   x = 7 // for example
    select COL from myTable where COL= (x or if x does not exist, the y : y > x, y - x smallest possible)
Run Code Online (Sandbox Code Playgroud)

Red*_*ter 5

SQL小提琴

Oracle 11g R2 架构设置

CREATE TABLE NUMBERS
    ("NUM" int)
;

INSERT ALL 
    INTO NUMBERS ("NUM")
         VALUES (1)
    INTO NUMBERS ("NUM")
         VALUES (7)
    INTO NUMBERS ("NUM")
         VALUES (10)
    INTO NUMBERS ("NUM")
         VALUES (11)
    INTO NUMBERS ("NUM")
         VALUES (12)
    INTO NUMBERS ("NUM")
         VALUES (19)
    INTO NUMBERS ("NUM")
         VALUES (20)
SELECT * FROM dual
;
Run Code Online (Sandbox Code Playgroud)

查询1

select min(n.VAL) as NextFree
from (
   SELECT LEVEL as VAL
   FROM DUAL
   CONNECT BY LEVEL <= 100000
   ORDER BY LEVEL
) n
left outer join NUMBERS d on n.VAL = d.NUM
where d.NUM is null
    and n.VAL >= 10
Run Code Online (Sandbox Code Playgroud)

结果

| NEXTFREE |
|----------|
|       13 |
Run Code Online (Sandbox Code Playgroud)