Найти номер отсутствующей записи в последовательно пронумерованных записях таблицы. CONNECT BY

Как в запросе сгенерировать к базе данных 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

Ну вот и все.

Вас заинтересует / Intresting for you:

Транзакции и механизм отмены U...
Транзакции и механизм отмены U... 5670 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:17:28
Номер SCN подтверждения в базе...
Номер SCN подтверждения в базе... 6258 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:17:28
Индексы Oracle
Индексы Oracle 27508 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:18:46
Сравнение и синхронизация  свя...
Сравнение и синхронизация свя... 6923 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:05
Войдите чтобы комментировать