rop@DESA11G> create table t (x int);
Tabla creada.
rop@DESA11G> create sequence t_seq;
Secuencia creada.
Una vez creada la tabla y la secuencia voy a llenar la tabla T con 1000 valores consecutivos:
rop@DESA11G> insert into t
2 select t_seq.nextval
3 from dual
4 connect by rownum <= 1000;
1000 filas creadas.
Ahora voy a eliminar filas para generar gaps y poder mostrar como funciona la senntencia para listar agujeros.
rop@DESA11G> delete from t
2 where (x between 100 and 150) or (x between 900 and 910);
62 filas suprimidas.
Ya tengo armado el ambiente asi que ahora simplemente ejecuto la sentencia
con FA para detectar los gaps:
rop@DESA11G> select *
2 from (select unique x,
3 lead(x) over (order by x) x_next
4 from t)
5 where x+1 != x_next;
X X_NEXT
---------- ----------
99 151
899 911
Se puede observar que se listaron los intervalos no cosecutivos que corresponden a las filas que se eliminaron en el ejemplo.