>>CREATE CURSOR NUMBERS (FN I) >>FOR K=1 TO 100 >> INSERT INTO NUMBERS VALUES (RAND()*97+3) >>NEXT >>SELECT DISTINCT FN FROM NUMBERS INTO CURSOR NUMBERS >> >>* RETURN GAPS >>lowerBound = 1 >>UpperBound = 100 >>SELECT m.lowerBound GapBegin; >>, MIN(FN)-1 GapEnd; >> FROM NUMBERS N; >> HAVING MIN(FN)>m.lowerBound; >>UNION ALL; >>SELECT N.FN+1 ; >> , NVL((SELECT MIN(FN) FROM NUMBERS WHERE FN > N.FN ) - 1,m.UpperBound ) ; >> FROM NUMBERS N; >> WHERE NOT EXISTS(SELECT * FROM NUMBERS WHERE FN-1 = N.FN) >>>
create CURSOR sequence (nval n(3,0)) INSERT INTO sequence VALUES (1) INSERT INTO sequence VALUES (2) INSERT INTO sequence VALUES (4) INSERT INTO sequence VALUES (5) INSERT INTO sequence VALUES (6) INSERT INTO sequence VALUES (9) INSERT INTO sequence VALUES (11) INSERT INTO sequence VALUES (12) INSERT INTO sequence VALUES (15) SELECT x.nval+1 gapstart, MIN(y.nval)-1 AS gapend ; FROM sequence x, sequence y ; WHERE x.nval < y.nval ; GROUP BY x.nval ; HAVING gapend - x.nval >= 1It gives you a gapstart and a gapend when there are multiple missing sequential numbers. (Thanks to Walter Meester on this several years ago)