Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Интересный запрос.


Автор: Kamoliddin 30.7.2007, 08:36
Оракл 8.107

У меня таблица с полями
1) авто инкремент (id).
2) поля 2 (name).
......
......

В таблице некотрые записи удалены. И мне нужно вывести именно эти недостаточные цифры.
Я знаю min(id) и max(id). 

Например: 

1  Лола 
2  Путин
4  Женя 
6  Камол

Значит max(6) и min(1). 

Результат:
3
5

Помогите  .......

Автор: DimW 30.7.2007, 09:22
Код

select rownum
from all_objects
where rownum <= (select max(id) from твоя_таблица)
minus
select id 
from твоя_таблица

Автор: DimW 30.7.2007, 09:38
или так:

Код

select id 
from (SELECT LEVEL id FROM DUAL CONNECT BY LEVEL <= 10000)
where id <= (select max(id) from твоя_таблица)
minus
select id 
from твоя_таблица

Автор: Kamoliddin 30.7.2007, 10:05
2 DimW

Первый запрос работает, но что будет если число записей на моей таблице будет больше чем записей на all_objects?

А второй запрос  ругается  "ORA - 01436 CONNECT BY loop in user data". 

???????

Автор: DimW 30.7.2007, 10:37
Цитата(Kamoliddin @  30.7.2007,  10:05 Найти цитируемый пост)
А второй запрос  ругается  "ORA - 01436 CONNECT BY loop in user data".


Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production 
PL/SQL Release 9.2.0.1.0 - Production 
CORE 9.2.0.1.0 Production 
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production 
NLSRTL Version 9.2.0.1.0 - Production 

запрос работает нормально.

Цитата(Kamoliddin @  30.7.2007,  10:05 Найти цитируемый пост)
Первый запрос работает, но что будет если число записей на моей таблице будет больше чем записей на all_objects?


результат пропущеных id будет не верным.

в любом случае необходимо множество на основе которого ты хочешь генерировать "искуственные" записи...

встречный вопрос: тебе это зачем???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)