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

Светлана Комарова

Светлана Комарова

Автор статьи. Системный администратор, Oracle DBA. Информационные технологии, интернет, телеком. Подробнее.

Ознакомьтесь с постом и постом, а затем продолжим. Как в запросе сгенерировать последовательность от 1 до 100? Да очень просто:

SELECT ROWNUM  FROM DUAL CONNECT BY level<=100

Надеюсь тут все понятно? А теперь пойдем дальше. Предположим у вас есть таблица с пронумерованными записями. Но какой-то умник удалил несколько записей. Нужно узнать записи, с какими номерами были удалены.

Сначала найдем максимальный номер в нашей таблице


SELECT max(id) FROM my_table;

Теперь сформируем последовательность, используя конструкцию 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:

Найти номер отсутствующей запи...
Найти номер отсутствующей запи... 4972 просмотров Anna Tue, 21 Nov 2017, 13:32:12
Транзакции и механизм отмены U...
Транзакции и механизм отмены U... 5665 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:17:28
Номер SCN подтверждения в базе...
Номер SCN подтверждения в базе... 6254 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:17:28
Как устроен поиск блоков данны...
Как устроен поиск блоков данны... 4518 просмотров Дэн Wed, 03 Jan 2018, 17:39:13
Войдите чтобы комментировать