---建表 CREATE TABLE c_lianxushu( c_shu NUMBER(5) ); DELETE FROM c_lianxushu --插入测试数据 BEGIN FOR i IN 1..50 LOOP INSERT INTO c_lianxushu VALUES(i); END LOOP; END; COMMIT; --查询并删除其中一条 SELECT * FROM c_lianxushu; DELETE FROM c_lianxushu c WHERE c.c_shu='8'; --如果中间只缺一个数 SELECT max(c.c_shu)+1 FROM c_lianxushu c WHERE c.c_shu = ROWNUM;
--如果缺好几条,但不连续缺 DELETE FROM c_lianxushu c WHERE c.c_shu='30'; SELECT p.b+1 FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) P WHERE P.B <> (SELECT E.B - 1 FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) E WHERE E.A = P.A + 1); --如果缺好几条,且连续缺 DELETE FROM c_lianxushu c WHERE c.c_shu='9'; DELETE FROM c_lianxushu c WHERE c.c_shu='10'; SELECT P.B + 1 FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) P WHERE P.B <> (SELECT E.B - 1 FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) E WHERE E.A = P.A + 1) UNION all SELECT P.B - 1 FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) P WHERE P.B <> (SELECT E.B + 1 FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) E 结果 WHERE E.A = P.A - 1) 8 30 10 30 ....此结果升序排列后,从小往大两两结合,就是所缺数字的区间