Как в запросе сгенерировать к базе данных Oracle последовательность от 1 до 100? Да очень просто:
SELECT ROWNUM FROM DUAL CONNECT BY level<=100
Надеюсь тут все понятно? А теперь пойдем дальше. Предположим у вас есть таблица Oracle с пронумерованными записями. Но какой-то умник удалил несколько записей. Нужно узнать записи, с какими номерами были удалены.
Сначала найдем максимальный номер в нашей таблице
SELECT max(id) FROM my_table;
Теперь сформируем последовательность, используя конструкцию Oracle CONNECT BY:
SELECT ROWNUM FROM DUAL CONNECT BY level<=( SELECT max(id) FROM my_table);
Отмечу, что CONNECT BY работает с подзапросами только с 10 версии ORACLE.
А дальше вы уже и сами поняли, как нужно действовать. Ну, например, вот так:
SELECT id_pr FROM my_table a,(SELECT ROWNUM as id_pr FROM DUAL CONNECT BY level<=( SELECT max(id) FROM my_table)) b where id(+)=id_pr and id is null
Ну вот и все.