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)