powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как определить отсутствующий элемент в последовательности
25 сообщений из 87, страница 2 из 4
как определить отсутствующий элемент в последовательности
    #39391346
Судья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbpatch, ты жалок.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391347
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchtable(sys.odcinumberlist(2,3,5,6,8,9)) это не решение задачи в общем случае, это вообще не решение.Правильно, это не решение. Это тестовые данные.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391354
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
table(sys.odcinumberlist(2,3,5,6,8,9)) - это набор тестовых данных за который ты почему то зацепился и предложил не разобравшись использовать connect by... я понимаю что ты вместо головы используешь пятую точку, но иногда думать бывает невредно. ты даже не понял что моё решение можно переписать в общем виде как
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select object_id from all_objects order by 1)
select to_char(max(n)+1)||'-'||(lead(min(n)) over (order by n-rownum)-1),n-rownum
from t
group by n-rownum
order by n-rownum;


попробуй хотя бы теперь не выдавать кирпичи для строительства своего бреда... подумай пять секунд перед ответом)
ты и так был никто, так хотя бы не стремись к абсолютному нулю)

offtop
dbms_photoshop,
мне кажется это твинк которого я прошлый раз так сильно обидел что он пошел на меня плакаться в онс и так ничего и не добился))) а если не твинк надо его довести чтобы и этот пошел жаловаться)) я ж даже модерам написать не могу)))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391356
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо бросаетесь кирпичами.
С точки зрения одних - для того, чтобы
abortКак найти отстутсвующий элемент '00003'
достаточно указать диапазон в который это '00003' попадает
другие отстаивают способы указания именно всех элементов диапазона
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391360
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо еще никто не додумался отстаивать точку зрения на предмет указания первого попавшегося такого числа с остановом, чтоб не лопатить все данные.
Тут бы уж точно все перестали понимать друг друга :)
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391363
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,
вот только не начинай... детская задачка про то как разложить диапазон на все значения в него входящие это еще проще))
и вот там кстати и понадобиться connect by... ну или xml table.. ну или... еще много решений))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391364
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopdbpatchпропущено...


Собеседование? О господи. Кого вы там собеседуете?

И чем вам SELECT LEVEL FROM DUAL CONNECT BY LEVEL < n ... не угодил?
Какие еще odcinumberlist ?

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
(
  SELECT LEVEL lvl FROM DUAL 
  CONNECT BY LEVEL < (SELECT MAX(all_objects.object_id) FROM all_objects)
)
WHERE NOT EXISTS (SELECT NULL FROM all_objects WHERE all_objects.object_id = lvl)



или даже быстрее раза в два:

Код: plsql
1.
2.
3.
  SELECT LEVEL FROM DUAL  CONNECT BY LEVEL < (SELECT MAX(all_objects.object_id) FROM all_objects)
  MINUS
  SELECT all_objects.object_id FROM all_objects 

Итак, в первом примере два полных сканирования, ANTI JOIN, и connect by.
Во втором два полных сканирования, connect by и сортировка, требуемая для минус.

В примере Винта одно сканирование и сортировка, требуемая для аналитики (если дырки ищутся в PK например, то сортировка вообще не потребуется, т.к. данные могут быть уже вычитаны упорядочено).

Ты утверждаешь что твое решение имеет какие-то преимущества?
Свой connect by ты можешь чуть улучшить генерируя от min до max а не от 1 до max, но все равно его сюда приплетать и генерировать весь диапазон тот еще идиотизм.

честно говоря, не пойму, что ты сравниваешь. первый случай ориентирован на выдачу первого результата - второй - на выдачу всех.

поизучай лучше честный план на примере (под SYS), ибо какой смысл рассматривать все наслоения великолепия в ALL_OBJECTS, они не относятся к сути задачи.

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
(
  SELECT LEVEL lvl FROM DUAL 
  CONNECT BY LEVEL < (SELECT MAX(obj$.obj#) FROM obj$)
)
WHERE NOT EXISTS (SELECT NULL FROM obj$ WHERE obj$.obj# = lvl)



там и близко нет никаких полных сканирований

что вы все агрессивные то такие сегодня?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391365
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintвот только не начинай... детская задачка про то как разложить диапазон на все значения
А если они не нужны, а надо просто в дырку всунуть. Причем желательно обойтись индексным покрытием?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391381
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,
ну имхо перпендикулярная задача, но учитывая что в дырку сувать приходиться не раз и не два.... и каждый раз лопатить для этого, даже по индексному доступу, таблицу как то накладно, я бы таки посчитал все дырки и выписал на отдельный листик... ведь там еще за уши можно притянуть множество одновременно работающих пользователей, а тут уже каждому не посчитаешь отдельно) тут лочить придёться) да и вообще раз 10 уже обсуждали)) чего мусолить одно и тоже)) все есть в поиске)
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391384
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintчего мусолить одно и тоже)) все есть в поиске)
Вот и я недоумеваю, чего все так впряглись?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391388
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,
да это ж личное)) сразу видно человек очень неравнодушен к вчерашним студентам типа меня)) да и скучно... давно не бодались, интересных тем нет....
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391391
a.l.e.x.a.n.d.r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так пойдет?

select
min(column_value) min_cv
,max(column_value) max_cv
,column_value-rn grp
from
(
select t.*
,row_number()over(order by column_value) rn
from
table(sys.odcinumberlist(2,3,4,5,6,8,9)) t
)
group by column_value-rn
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391396
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
table(sys.odcinumberlist(2,3,5,6,8,9)) - это набор тестовых данных за который ты почему то зацепился и предложил не разобравшись использовать connect by... я понимаю что ты вместо головы используешь пятую точку, но иногда думать бывает невредно. ты даже не понял что моё решение можно переписать в общем виде как
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select object_id from all_objects order by 1)
select to_char(max(n)+1)||'-'||(lead(min(n)) over (order by n-rownum)-1),n-rownum
from t
group by n-rownum
order by n-rownum;


попробуй хотя бы теперь не выдавать кирпичи для строительства своего бреда... подумай пять секунд перед ответом)
ты и так был никто, так хотя бы не стремись к абсолютному нулю)


и? в чем суть твоих откровений? читая мой код - можно сразу сказать, что он делает.

читая твой код - я буду минимум секунд тридцать пытаться разбирать закорючки с этими +1 и -1, почитаю лишний раз доку про subquery factoring, и все равно у меня останется привкус рассмотренного говнокода и убеждение в необходимости его как минимум потестировать - т.е. на выходе будем иметь лишь оценочное суждение вида: "слишком сложно, переписать".

кроме того, никаких преимуществ перед connect by лично я не вижу, особенно в задаче - "мне нужно получить первый свободный номер из дырок"

может ты их огласишь в явном виде?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391403
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевХорошо еще никто не додумался отстаивать точку зрения на предмет указания первого попавшегося такого числа с остановом, чтоб не лопатить все данные.
Тут бы уж точно все перестали понимать друг друга :)Для тебя как-то принципиально меняется логика этой задачи если надо отфетчить только одну строку, а не все?
dbpatchпоизучай лучше честный план
...
что вы все агрессивные то такие сегодня?В cлучае not exists может быть один из трех вариантов плана
- anti join
- nested loops anti
- filter
Любой из вариантов хуже чем одно сканирование в альтернативном решении (это мы тут еще не упоминаем connect by).
Ты бы чуток вежливее разговариал, учитывая практически полное отсутсвие знаний и понимания, тогда агрессии в твой адрес, вероятно, было бы поменьше.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391404
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintСергей Арсеньев,
ну имхо перпендикулярная задача, но учитывая что в дырку сувать приходиться не раз и не два.... и каждый раз лопатить для этого, даже по индексному доступу, таблицу как то накладно, я бы таки посчитал все дырки и выписал на отдельный листик... ведь там еще за уши можно притянуть множество одновременно работающих пользователей, а тут уже каждому не посчитаешь отдельно) тут лочить придёться) да и вообще раз 10 уже обсуждали)) чего мусолить одно и тоже)) все есть в поиске)

почему за уши? это вполне реальная задача, называется "резервирование номера договора" (или любого иного документа).

никаких листиков не нужно, это банальный unique key и поле state = 'DRAFT' в таблице документов, с оптимистичным подходом - "быстро быстро вставили, и закоммитили, если не получились и попали на ORA-00001 - сходили еще раз за следующим номером".

даже отдельный листик заводить не нужно
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391412
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
сначала хотел написать.... но потом понял что очередной непроходимо тупой нуб. как всегда одни и те же аргументы у тысяч идиотов. сначала выпятить своё решение, а потом скатываться до оценочных суждений...
это БД. тут все измеряется попугаями. и твои поделки по попугаям в глубокой жопе. как и писал Фотошопчик. но тебе даже знаний на осознание этой простейшей истины не хватает.... дальше будет только троллинг))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391415
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
ORA-00001 ахаха.. у меня истерика.. я просто валяюсь.. просто сходили.. и просто еще раз выполнили ага.... просто.. все ж просто... у рукожопых всегда всё просто.. ну сходи на паре миллиардов строк.. сходи родной.. смотри чтобы потом тебе руки не поломали за кривожопство))) ты хоть представляеш сколько стоит rollback в некоторых транзакциях? хотя откуда... вся молодец же считает что проще обработать ошибку... у мени никогда не кончиться работа с такими как ты.. пиши исчо))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391417
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopdbpatchпоизучай лучше честный план
...
что вы все агрессивные то такие сегодня?В cлучае not exists может быть один из трех вариантов плана
- anti join
- nested loops anti
- filter
Любой из вариантов хуже чем одно сканирование в альтернативном решении (это мы тут еще не упоминаем connect by).
.
там у него не только сканирование, там еще сортировка-группировка, и CPU cost не так уж и мал.

но если тебе хочется полного феншуя - кто мешает сделать PL/SQL функцию, которая будет крайне бережно перебирать значения в индексе, отсчитывая цикл значений отдельно (фактически задача слияния сортировкой, один проход, array fetch, минимум LIO)?

но тут запретили курсор и PL/SQL, ок.

dbms_photoshopТы бы чуток вежливее разговариал, учитывая практически полное отсутсвие знаний и понимания, тогда агрессии в твой адрес, вероятно, было бы поменьше.

о да, это значит я ВНЕЗАПНО начал обвинять кого-то в идиотизме и ламерстве, да?
и да, я учитываю полное отсутствие знания и понимания сути задачи у других, даже примеры привожу задач из реальной жизни, что тут-то не так?

или, о боже, это ты еще раз решил рассказать о своем ценном мнении о моей некомпетентности и неопытности?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391420
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
сначала хотел написать.... но потом понял что очередной непроходимо тупой нуб. как всегда одни и те же аргументы у тысяч идиотов. сначала выпятить своё решение, а потом скатываться до оценочных суждений...
это БД. тут все измеряется попугаями. и твои поделки по попугаям в глубокой жопе. как и писал Фотошопчик. но тебе даже знаний на осознание этой простейшей истины не хватает.... дальше будет только троллинг))

тупой нуб? зачем так самокритично-то?

впрочем да, неофитам это свойственно, не понимать, что современный код намного сложнее читать, чем писать, и писать нужно как можно более понятнее.

ну так что там с явными преимуществами?

вот так сразу слив?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391433
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchкроме того, никаких преимуществ перед connect by лично я не вижу, особенно в задаче - "мне нужно получить первый свободный номер из дырок"

может ты их огласишь в явном виде?Ок, если тебе надо получить первый номер (и ты видимо уже подразумеваешь, что имеется необходимый уникальный индекс), то ты предлагаешь index scan min/max + connect by + nested loops + index unique scan.
Альтернативный подход был бы аналитика + rownum <= 1 (ну это если тебе таки хватит мозгов понять что было написано Винтом и убрать оттуда группировку и rownum). В плане это было бы index range scan + window buffer + stopkey.
Или простым языком: делаем фетч по индексу, пока не попалось значение, отличающееся от предыдущего более чем на 1.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391438
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchтам у него не только сканирование, там еще сортировка-группировка, и CPU cost не так уж и малПоходу таки не хватило мозгов понять решение.
Сортировки-группировки это украшательства, которые для нахождения "первой дырки" совсем не нужны.
Ну а сравнивать [разные] запросы на основании CPU cost это даже не смешно.
Жду тебя в других темах, это было увлекательно.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391455
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopСергей АрсеньевХорошо еще никто не додумался отстаивать точку зрения на предмет указания первого попавшегося такого числа с остановом, чтоб не лопатить все данные.
Тут бы уж точно все перестали понимать друг друга :)Для тебя как-то принципиально меняется логика этой задачи если надо отфетчить только одну строку, а не все?Все-таки, в случае window buffer + stopkey индекс вычитывается целиком, так что при стремлении к совершенству может понадобится логику со сравнением надо вынести в PL/SQL . :)
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391456
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopdbpatchкроме того, никаких преимуществ перед connect by лично я не вижу, особенно в задаче - "мне нужно получить первый свободный номер из дырок"

может ты их огласишь в явном виде?Ок, если тебе надо получить первый номер (и ты видимо уже подразумеваешь, что имеется необходимый уникальный индекс), то ты предлагаешь index scan min/max + connect by + nested loops + index unique scan.
Альтернативный подход был бы аналитика + rownum <= 1 (ну это если тебе таки хватит мозгов понять что было написано Винтом и убрать оттуда группировку и rownum). .
если не секрет, тебе самому мозгов-то хватает? серьезно?

dbms_photoshopВ плане это было бы index range scan + window buffer + stopkey.
Или простым языком: делаем фетч по индексу, пока не попалось значение, отличающееся от предыдущего более чем на 1.

ок, и? разве оно было тут кем-то озвучено?

ну давай потестим, оок (включаем режим тупого)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
SQL> CREATE TABLE zz AS SELECT object_id FROM all_objects;

SQL> CREATE INDEX zzi ON zz(object_id);

SQL> DECLARE
     l_res NUMBER := 0;
   BEGIN
   
     FOR i IN 1..10000 LOOP
       FOR c IN (
         SELECT object_id + 1 ID FROM (
           SELECT --+ index(zz)
             object_id, LEAD(object_id) OVER (ORDER BY object_id) - 1 next_id
           FROM zz
         ) WHERE next_id - object_id  > 1 AND ROWNUM = 1
       ) LOOP
         l_res := l_res + c.id;
       END LOOP;
     END LOOP;
   END;
   /
PL/SQL procedure successfully completed
Executed in 25.898 seconds
SQL> DECLARE
     l_res NUMBER := 0;
   BEGIN
   
     FOR i IN 1..10000 LOOP
       FOR c IN (
         SELECT ID FROM
         (
           SELECT LEVEL ID FROM DUAL
           CONNECT BY 1=1
         )
         WHERE NOT EXISTS (SELECT NULL FROM zz WHERE zz.object_id = ID) AND ROWNUM = 1
       ) LOOP
         l_res := l_res + c.id;
       END LOOP;
     END LOOP;
   END;
   /
PL/SQL procedure successfully completed
Executed in 3.411 seconds



или нужно аналитику как-то по иному посчитать? (включаем выражение лица гомера симпсона).

прости, в subquery factoring и прочих идиоамтических местных конструкциях не силен (подскальзываюсь и падаю лицом в лужу).
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391460
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopdbpatchтам у него не только сканирование, там еще сортировка-группировка, и CPU cost не так уж и малПоходу таки не хватило мозгов понять решение.
Сортировки-группировки это украшательства, которые для нахождения "первой дырки" совсем не нужны.
Ну а сравнивать [разные] запросы на основании CPU cost это даже не смешно.
Жду тебя в других темах, это было увлекательно.

не надо меня ждать, давай лучше, со своей-то крутой мозгой-то, продемонстрируй зе бест практисиз солюшин.

смогешь-то, или мозга сильно крутая, не на такие задачи заточенная? (извини, что говорю твоими эпатажами про качество чужих мозгов, ничего личного конечно).
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391467
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopНу а сравнивать [разные] запросы на основании CPU cost это даже не смешно.
Жду тебя в других темах, это было увлекательно.

ну почему не смешно? мне вот explain plan продемонстрировал cpu cost 23 и 3 соотвественно, очень близко к полученным практическим замерам

(прости, режим тупого еще не выключен)
...
Рейтинг: 0 / 0
25 сообщений из 87, страница 2 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как определить отсутствующий элемент в последовательности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]