powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как определить отсутствующий элемент в последовательности
87 сообщений из 87, показаны все 4 страниц
как определить отсутствующий элемент в последовательности
    #39390849
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дана последовательность данных
'00001'
'00002'
'00004'
'00005'
'00006'
Как найти отстутсвующий элемент '00003'
Курсоры не предлагать желательно.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39390855
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abort,

lag/lead
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39390980
Артефакт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad, это не оптимально.

Оптимальное решение приводили уже. Просто и читабельно.
-2-
Код: plsql
1.
2.
3.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,4,5,6,8,9)))
select (max(n)-min(n))*(max(n)-min(n)+1)/2+(count(*)+1)*min(n)-sum(n)
from t;
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39390997
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артефакт,
уймись. может быть и 2 отсутствующих. что тогда делать будешь?)
sys.odcinumberlist(2,3,5,6,8,9)
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391008
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abortдана последовательность данных
'00001'
'00002'
'00004'
'00005'
'00006'
Как найти отстутсвующий элемент '00003'
Курсоры не предлагать желательно.
minus select..
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391015
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пропуски могут быть более 1.
LEAD оптимально но при больших данных считается долго. Но пока терпимо...
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391022
Артефакт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint, как?! а все, теперь вижу последний комментарий топикстартера.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391033
abortдана последовательность данных
'00001'
'00002'
'00004'
'00005'
'00006'
Как найти отстутсвующий элемент '00003'

А можно алгоритм, по которому определяется разрыв в последовательности символьных данных?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391036
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артефакт,
хрустальный шар всегда прав))
abort ,
а еще может отсутствовать подряд несколько значений))
сто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно его
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,5,6,8,9)) 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;

...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391040
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жертва abortа,

формируются файлы, автоматом они парсятся и заносятся в БД. При это присваивается сквозной номер. Но иногда обработчик дает сбой или файл(ы) не поступают. Т.е. вместо последовательности данных имена файлов с сквозным сиквенсом
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391079
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintАртефакт,
хрустальный шар всегда прав))
abort ,
а еще может отсутствовать подряд несколько значений))
сто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно его
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,5,6,8,9)) 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;



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

И чем вам 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 
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391090
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
иди учись читать. особенно полезно с третьего поста откуда и был взят odcinumberlist. придраться больше не к чему? или есть что по основной задаче автора сказать? ты бы точно не прошёл))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391102
Артефакт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint, dbpatch

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

я придрался к твоей ультрапафосной фразе:

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


выяснить, с какого перепугу ты его хочешь видеть только его - прямо экзестенциальная научная проблема теперь.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391117
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
Код: plsql
1.
2.
3.
4.
5.
WITH t(n)
 (SELECT 100000000000000000 a
    FROM dual
  UNION ALL
  SELECT 100000000000000002 FROM dual)


вот тебе тестовые данные. жду твоих тестов по времени выполнения, не надорвись там...
потом может быть снизойду до убого и поясню почему жду именно такого решения, раз уж кто-то не смог за год найти кнопку поиска
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391128
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
Код: plsql
1.
2.
3.
4.
5.
WITH t(n)
 (SELECT 100000000000000000 a
    FROM dual
  UNION ALL
  SELECT 100000000000000002 FROM dual)


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

да да, ты главное жди :)

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

ты что сказать-то хотел? что на CONNECT BY temp/pga расходуется? и? у него в задаче пять разрядов в цифрах, потребность в памяти можешь сам посчитать, на калькуляторе, собеседователь.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391143
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
это ты притянул за уши all_objects, и это ты начал про "даже быстрее раза в два", а теперь вдруг слился и не хочешь считать количество лапши на своих ушах))) и как "вчерашний студент"(для меня это комплимент если что) могу посоветовать быть более предметным и последовательным)) а не прыгать с темы на тему. твои решения сто раз обсасывались на этом форуме)) еще лет 12 назад. если мне не изменяет моя студенческая память и дата регистрации)))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391155
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintсто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно егоПозориться с ROWNUM аж сто раз не стоило.

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

Я конечно извиняюсь, но у тебя разве кто-то спрашивал, кому что сейчас и вообще нужно делать?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391206
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchЯ конечно извиняюсь, но у тебя разве кто-то спрашивал, кому что сейчас и вообще нужно делать?Troll detected.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391216
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На хабре была похожая статья
https://habrahabr.ru/post/303364/
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391221
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
это ты притянул за уши all_objects, и это ты начал про "даже быстрее раза в два",
all_objects это обычная практика для примеров, ибо он есть у всех, что тебя так перевозбудило?

Vintа теперь вдруг слился и не хочешь считать количество лапши на своих ушах)))
С чего бы я слился? Это ты в лужу сел, не понимая суть задачи.

Заполнение дыр актуально на человеко-читаемых данных, т.е. когда у тебя до 6 разрядов (до шести цифр), и там connect by
работает очень хорошо.

Когда у тебя диапазон за миллион - то там никакой нужды заполнять дыры ни в одной практической задаче нет, там работают просто сиквенсы и дыры никого не напрягают. Ибо это 100% не статические справочники, а бизнес-факты.
И даже если очень припечет (к примеру искать номера пропущенных номеров телефонов у операторов или кредитных карт у банков) - никто не мешает поработать диапазонами по 100к в цикле.

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

Vintи как "вчерашний студент"(для меня это комплимент если что) могу посоветовать быть более предметным и последовательным)) а не прыгать с темы на тему. твои решения сто раз обсасывались на этом форуме)) еще лет 12 назад. если мне не изменяет моя студенческая память и дата регистрации)))

мои решения? дата регистрации? сюр какой-то.

ну пытаешься ты сохранить лицо, это понятно, но я то тут причем?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391254
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchVintАртефакт,
хрустальный шар всегда прав))
abort ,
а еще может отсутствовать подряд несколько значений))
сто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно его
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,5,6,8,9)) 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;



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

И чем вам 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, но все равно его сюда приплетать и генерировать весь диапазон тот еще идиотизм.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391338
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopТы утверждаешь что твое решение имеет какие-то преимущества?
Преимущества перед чем, прости? table(sys.odcinumberlist(2,3,5,6,8,9)) это не решение задачи в общем случае, это вообще не решение.

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

Да ты что? Ну приведи пример своего ээээ.... неидиотизма, и мы тут сейчас выскажем свое оценочное суждение :)
А то кричать лишь "гляди, повели идиота" - любой идиот сможет.

А по поводу того, что можно и (нужно порой_ генерировать и проверять произвольные диапазоны от N до M я говорил выше в фразе про "100к в цикле", и? Кому надо, тот и сам догадается.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #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
как определить отсутствующий элемент в последовательности
    #39391487
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, вариант

Код: plsql
1.
2.
3.
SELECT min + level id from dual connect by level < max - min
minus 
select id from table



Достаточно надежный, да и обычно такая операция проводиться единоразово, так что гнаться за перформансом нет особого смысла.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391511
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchне надо меня ждать, давай лучше, со своей-то крутой мозгой-то, продемонстрируй зе бест практисиз солюшин
dbms_photoshopВсе-таки, в случае window buffer + stopkey индекс вычитывается целиком, так что при стремлении к совершенству может понадобится логику со сравнением надо вынести в PL/SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare
   tmp int;
begin
   for i in (select * from zz order by object_id)
   loop
      if tmp + 1 <> i.object_id then exit; end if;
      tmp   := i.object_id;
   end loop;
   dbms_output.put_line(tmp + 1);
end;

Ты выкинул обращение к таблице из генератора, так что при крупных айдишниках будет полная жопа.
Кроме того, чем дальше пропуск от начала тем сильнее будет проигрывать PL/SQL подходу.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391519
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это называется найди 10 отличий....
dbpatch
Код: 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)



и
dbpatch
Код: 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.
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 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



умилил .... SELECT LEVEL ID FROM DUAL CONNECT BY 1=1, типа никто не догадается про мелкую халтурку)) так то ты код пишешь прозрачно и понятно?)
а еще lead в моем примере не для этого использован)) а то как в том анекдоте про верблюдицу и генерала))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391521
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
блин я думал ты домой уже идёшь.. думал до завтра еще можно издеваться над отсутствием мозга.. тем более он так подставляется.. ну зачем.. зачем ты ему показал... он же щяз опять начнёт отмазки искать.. говорить что нельзя pl\sql использовать. курсоры.. нельзя айяйяй... и вообще мы все только что школу окончили один он великий уже написал стомильярдов строк говнокода в продакшне)))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391524
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vint, dbms_photoshop

девочки, не ссорьтесь (с)

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

или нетупого решения не будет?

и да, кто сказал в задаче, что нам нужно искать дырки в диапазоне от 1 до 10^10? сможете привести хоть один пример задачи из реальной жизни, где нужно подобное?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391530
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopdbpatchне надо меня ждать, давай лучше, со своей-то крутой мозгой-то, продемонстрируй зе бест практисиз солюшин
dbms_photoshopВсе-таки, в случае window buffer + stopkey индекс вычитывается целиком, так что при стремлении к совершенству может понадобится логику со сравнением надо вынести в PL/SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare
   tmp int;
begin
   for i in (select * from zz order by object_id)
   loop
      if tmp + 1 <> i.object_id then exit; end if;
      tmp   := i.object_id;
   end loop;
   dbms_output.put_line(tmp + 1);
end;

Ты выкинул обращение к таблице из генератора, так что при крупных айдишниках будет полная жопа.
Кроме того, чем дальше пропуск от начала тем сильнее будет проигрывать PL/SQL подходу.

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

в задаче это отметается, клиент не хочет курсоры и PL/SQL

я использовал PL/SQL в сравнениях просто для генерации цикла с целью замеров, в самом поиске "дырки" он не участвует (прости, что я это поясняю, а то может я двух слов связать не смогу достаточно понятно).
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391533
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchVint, dbms_photoshop

девочки, не ссорьтесь (с)

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

или нетупого решения не будет?

и да, кто сказал в задаче, что нам нужно искать дырки в диапазоне от 1 до 10^10? сможете привести хоть один пример задачи из реальной жизни, где нужно подобное?Мальчик, ты можешь вещать про
статические справочники ... бизнес-факты ... номеров телефонов ... кредитных картТы можешь менять свой запрос, создавать индексы, выдумывать ограничения на входные данные и корректировки к постановке.
При некоторых условиях, учитывая все модификации твой запрос может нормально смотреться, да.
Но уровень общения больше подходит для ПТ.
Код: 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.
44.
45.
46.
47.
48.
49.
SQL> declare
  2     tmp   int;
  3  begin
  4
  5     for j in (select *
  6                 from zz
  7                where object_id is not null
  8               order by object_id)
  9     loop
 10
 11        if tmp + 1 <> j.object_id
 12        then
 13           dbms_output.put_line(tmp + 1);
 14        end if;
 15
 16        tmp   := j.object_id;
 17
 18     end loop;
 19
 20  end;
 21  /
1234567

PL/SQL procedure successfully completed.

Elapsed: 00:00:04.86
SQL>
SQL> begin
  2
  3     for c in (select id
  4                 from (select level id
  5                         from dual
  6                       connect by 1 = 1)
  7                where not exists
  8                         (select null
  9                            from zz
 10                           where zz.object_id = id)
 11                  and rownum = 1)
 12     loop
 13        dbms_output.put_line(c.id);
 14     end loop;
 15
 16  end;
 17  /
1234567

PL/SQL procedure successfully completed.

Elapsed: 00:00:07.24

Vintdbms_photoshop,
блин я думал ты домой уже идёшь.. У меня только 16:30.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391535
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintумилил .... SELECT LEVEL ID FROM DUAL CONNECT BY 1=1, типа никто не догадается про мелкую халтурку)) так то ты код пишешь прозрачно и понятно?)
а еще lead в моем примере не для этого использован)) а то как в том анекдоте про верблюдицу и генерала))

я рад, что тебе понравилось. в реальном продукционном коде вызыватель всегда указывает верхнюю (и нижнюю) границу, что эквивалентно по вычислительной стоимости 1=1 (нет нужды ходить читать что-то там для ограничения connect by).

или да, с какого перепугу вообще нужно ходить читать max в таблицу чтоб увидеть верхний предел диапазона?
расскажешь нам, о великий неговнокодер, у которого мозг не осуствует? :):):)

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

девочки, не ссорьтесь (с)

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

или нетупого решения не будет?

и да, кто сказал в задаче, что нам нужно искать дырки в диапазоне от 1 до 10^10? сможете привести хоть один пример задачи из реальной жизни, где нужно подобное?Мальчик, ты можешь вещать про
статические справочники ... бизнес-факты ... номеров телефонов ... кредитных картТы можешь менять свой запрос, создавать индексы, выдумывать ограничения на входные данные и корректировки к постановке.
При некоторых условиях, учитывая все модификации твой запрос может нормально смотреться, да.
Но уровень общения больше подходит для ПТ.
Код: 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.
44.
45.
46.
47.
48.
49.
SQL> declare
  2     tmp   int;
  3  begin
  4
  5     for j in (select *
  6                 from zz
  7                where object_id is not null
  8               order by object_id)
  9     loop
 10
 11        if tmp + 1 <> j.object_id
 12        then
 13           dbms_output.put_line(tmp + 1);
 14        end if;
 15
 16        tmp   := j.object_id;
 17
 18     end loop;
 19
 20  end;
 21  /
1234567

PL/SQL procedure successfully completed.

Elapsed: 00:00:04.86
SQL>
SQL> begin
  2
  3     for c in (select id
  4                 from (select level id
  5                         from dual
  6                       connect by 1 = 1)
  7                where not exists
  8                         (select null
  9                            from zz
 10                           where zz.object_id = id)
 11                  and rownum = 1)
 12     loop
 13        dbms_output.put_line(c.id);
 14     end loop;
 15
 16  end;
 17  /
1234567

PL/SQL procedure successfully completed.

Elapsed: 00:00:07.24

Vintdbms_photoshop,
блин я думал ты домой уже идёшь.. У меня только 16:30.

это был пример нетупого решения?
тебе уже пятый раз говорят, что нельзя использовать PL/SQL для поиска значения дырки.

это что, так сложно понять?

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

как иначе нужно? тебе уже шестой раз говорят, что нельзя через PL/SQL, ты не в состоянии это услышать и кто виноват теперь?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391553
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
ты уж определись, то ли тебе продашн решения то ли тебе первое попавшееся значение, а то ли "в реальном продукционном коде вызыватель всегда указывает верхнюю (и нижнюю) границу" ее же как то надо вычислить.. вот и потрудись вычислить ее 10000 раз как у тебя в примере и описано). иначе будь добр взять моё решение и вывести ВСЕ дырки 10 тысяч раз. и вывести все дырки в своем решении так же 10 тысяч раз, а не юлить как уж на сковородке))) ты в очередной раз показываешь уровень мастерства))
кстати может ты родственник мастера зива?) он тож так умеет))
если уж ты начал заливать за продакшн решения, так признай что в продакшне использовано будет что угодно. для достижения максимального результата. признай что ты унылое Г, изначально не осознавшее задачу и утрись))


dbms_photoshop,
ну насчет времени это был сарказм) я помню про разницу с европой)) может не точно.. но помню)
видишь. как я и говорил пошли отмазки по попводу того что нельзя использовать pl\sql, при этом почему то сразу можно знать максимальное и минимальное значение....))) странно правда что задается 1, а не хотя бы пару миллиардов в максе.. как и бывает в продуктивных решениях)) а еще лучше вычисляется. чтобы точно не ошибится, и не скакнуть выше сиквенса))))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391577
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
ты уж определись, то ли тебе продашн решения то ли тебе первое попавшееся значение, а то ли "в реальном продукционном коде вызыватель всегда указывает верхнюю (и нижнюю) границу" ее же как то надо вычислить.. вот и потрудись вычислить ее 10000 раз как у тебя в примере и описано). иначе будь добр взять моё решение и вывести ВСЕ дырки 10 тысяч раз. и вывести все дырки в своем решении так же 10 тысяч раз, а не юлить как уж на сковородке))) ты в очередной раз показываешь уровень мастерства))
кстати может ты родственник мастера зива?) он тож так умеет))
если уж ты начал заливать за продакшн решения, так признай что в продакшне использовано будет что угодно. для достижения максимального результата. признай что ты унылое Г, изначально не осознавшее задачу и утрись))


я вполне признал твоё решение, оно действительно умеет делать ВСЁ тобой озвученное, ибо
да, ты похоже невероятно крутой специалист и уже признанный местный авторитет...

что-то еще нужно сейчас признать? огласи весь список пожеланий
:)

но практические замеры ты нам покажешь, или ты сам не в состоянии скопипастить, все еще нужна моя помощь?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391599
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
что именно тебе практически показать? 0.25 секунд на том решении что тебе фотошоп показал?) или опять будешь ныть что PL\SQL нечестно? зато быстро)) ты бы лучше сходил померял своё решение при вычислении макс и мин значений)) правда измерялка сломается раньше))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391615
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
что именно тебе практически показать? 0.25 секунд на том решении что тебе фотошоп показал?) или опять будешь ныть что PL\SQL нечестно? зато быстро)) ты бы лучше сходил померял своё решение при вычислении макс и мин значений)) правда измерялка сломается раньше))

с "решением" фотошопа мы уже разобрались. с "нытьем" вы оба можете пройти вот сюда: 20143239 , во фразу "Курсоры не предлагать желательно", поныть там.



сейчас твой шанс показать свой мастеркласс, в сравнении, естественно, вон с теми твоими lead, +1 -1 и прочими group by изяществами против предложенного мной connect by not exists

итак? мы увидим показательное выступление гуру, или просто сразу тебе выдадим медаль рекордсмена?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391624
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
идиот. клинический))) ты в упор не видишь решения задачи. это ты за уши притянул нахождение первого пропущенного элемента последовательности. при этом не вычисляешь максимум и минимум а береш просто 1. тупо 1.... а если в таблице будет идиентификатор с номером 1? что делать будешь?) опять говорить что вырожденный случай? это ты решаешь непонятную задачу непонятно каким способом при этом всех вокруг пытаешся убедить что только твое решение является 100% правильным)) а все lead group by и конкатенации в моем изначальном решении только для того чтобы показать ВСЕ отсутствующие интервалы в таблице.
я бисер перед ничтожеством метать не намерен)) хватит того что я тебя развел на измерения в которых ты в очередной раз сфейлился, и не смог измерить своё же решение с первой странице.. а все почему? да потому что производительность того решения на пару порядков проигрывает твоему же надуманному решению с lead))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391625
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
идиот. клинический))) ты в упор не видишь решения задачи.

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

не знаю, насколько в данном случае клинической.

остальные твои словосотрясания скипнуты, не интересно. или примеры сравнений в студию, или окончательно зачитываем тебе слив с занесением в профиль.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392012
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще конечно удивляешься, насколько тупыми могут быть даже собственные решения.
Смотрим третий (последний) вариант ответа и время реакции.

lead, with, connect by, pl/sql или нет, мда, вот уж действительно, если мозг от супернедознаний сильно жмет, и не такого вкопипасишь порой.

Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
SQL> 
SQL> DECLARE
  2    l_res NUMBER := 0;
  3  BEGIN
  4  
  5    FOR i IN 1..10000 LOOP
  6      FOR c IN (
  7        SELECT object_id + 1 ID FROM (
  8          SELECT --+ index(zz)
  9            object_id, LEAD(object_id) OVER (ORDER BY object_id) - 1 next_id
 10          FROM zz
 11        ) WHERE next_id - object_id  > 1 AND ROWNUM = 1
 12      ) LOOP
 13        l_res := l_res + c.id;
 14      END LOOP;
 15    END LOOP;
 16    dbms_output.put_line(l_res);
 17  END;
 18  /
1010000
PL/SQL procedure successfully completed
Executed in 25.249 seconds
SQL> DECLARE
  2    l_res NUMBER := 0;
  3  BEGIN
  4  
  5    FOR i IN 1..10000 LOOP
  6      FOR c IN (
  7        SELECT ID FROM
  8        (
  9          SELECT LEVEL ID FROM DUAL
 10          CONNECT BY 1=1
 11        )
 12        WHERE NOT EXISTS (SELECT NULL FROM zz WHERE zz.object_id = ID) AND ROWNUM = 1
 13      ) LOOP
 14        l_res := l_res + c.id;
 15      END LOOP;
 16    END LOOP;
 17    dbms_output.put_line(l_res);
 18  END;
 19  /
1010000
PL/SQL procedure successfully completed
Executed in 3.476 seconds
SQL> DECLARE
  2    l_res NUMBER := 0;
  3  BEGIN
  4  
  5    FOR i IN 1..10000 LOOP
  6      FOR c IN (
  7        SELECT rn id FROM (
  8          SELECT --+ index(zz)
  9           object_id, ROWNUM rn FROM zz
 10          ORDER BY object_id
 11        )
 12        WHERE object_id <> rn AND ROWNUM = 1
 13      ) LOOP
 14        l_res := l_res + c.id;
 15      END LOOP;
 16    END LOOP;
 17    dbms_output.put_line(l_res);
 18  END;
 19  /
1010000
PL/SQL procedure successfully completed
Executed in 0.775 seconds
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392041
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchВообще конечно удивляешься, насколько тупыми могут быть даже собственные решения.
Код: plsql
1.
2.
3.
SELECT --+ index(zz)
  9           object_id, ROWNUM rn FROM zz
 10          ORDER BY object_id


особенно зная как работает ROWNUM
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392063
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййdbpatchВообще конечно удивляешься, насколько тупыми могут быть даже собственные решения.
Код: plsql
1.
2.
3.
SELECT --+ index(zz)
  9           object_id, ROWNUM rn FROM zz
 10          ORDER BY object_id


особенно зная как работает ROWNUM

и? с какой радости ты убрал subquery?

и как он работает в этом случае? я надаюсь часть про pagination в расказах Тома ты уже осилил?


http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392080
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй
Код: plsql
1.
2.
3.
SELECT --+ index(zz)
  9           object_id, ROWNUM rn FROM zz
 10          ORDER BY object_id


особенно зная как работает ROWNUMмагия индекса
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392081
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

thx
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392094
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор:
dbpatch, рекомендую недельку не появляться на форуме, остыть и, заодно, попытаться понять все то, что было предложено в топике.

Неделя бана. Время пошло.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392107
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Че, правда?
Очень интересно
Грекс, конечно, слегка передергивает (немного не тот код от Vint, начинает с заведомо отсутствующего ID в своем решении, что дает неверный результат, но сразу и т.д. и т.п.), но он по крайней мере приводит решения и сравнения. А его не поправляют, а только высокомерно "пытаются" словить лулзы, поскольку таки лулзы ловит таки он
А по поводу стиля общения -- на фоне остальных он не сильно выделяется

Я так понимаю, AI сам тему даже не читал? Но осудил
Знакомо, че уж там...
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392119
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЧе, правда?
Очень интересно
Грекс, конечно, слегка передергивает (немного не тот код от Vint, начинает с заведомо отсутствующего ID в своем решении, что дает неверный результат, но сразу и т.д. и т.п.), но он по крайней мере приводит решения и сравнения. А его не поправляют, а только высокомерно "пытаются" словить лулзы, поскольку таки лулзы ловит таки он
А по поводу стиля общения -- на фоне остальных он не сильно выделяется

Я так понимаю, AI сам тему даже не читал? Но осудил
Знакомо, че уж там...Во-первых, это не грекс, а какое-то юное дарование.
Во-вторых, это по-твоему тоже конструктив 20146383 ? Может ты еще и покажешь где я его называл тупым?
В-третьих лулзы ловить может кто угодно, особенно если находиться под веществами, только положение дел это не меняет.
Если б ты читал внимательнее, то обратил бы внимание, что в споем последнем "решении" персонаж кроме неправильного использования rownum еще сделал очередное предположение, что диапазон начинается с 1. Просто уже не было желания комментировать учитывая реакцию болезного.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392121
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

Как говорится "do not make conclusions based on assumptions". Подумай над этим.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392136
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopВо-первых, это не грекс, а какое-то юное дарование.А по моему, очень похож
И по стилю и по знаниям (ну или верхушкам, кому как удобнее)
dbms_photoshopВо-вторых, это по-твоему тоже конструктив 20146383 ? Может ты еще и покажешь где я его называл тупым?Даже только по ссылке сразу вижу снисходительное "мальчик". Это не "тупой", но не очень далеко
Давай тогда начнем комментировать всю ветку начиная с первого "обидного" обращения
dbms_photoshopВ-третьих лулзы ловить может кто угодно, особенно если находиться под веществами, только положение дел это не меняет.Это какие-то фантазии, явно "под веществами"
dbms_photoshopЕсли б ты читал внимательнее, то обратил бы внимание, что в споем последнем "решении" персонаж кроме неправильного использования rownum еще сделал очередное предположение, что диапазон начинается с 1. Просто уже не было желания комментировать учитывая реакцию болезного.Если бы ты читал внимательней, то увидел бы, что на это я специально обратил внимание
Но если даже начинать не с 1, а с минимального, то его код все равно выигрывает (как уже и говорилось, вроде даже тобой, аналитика все равно требует всего промотра и ее нельзя прервать по STOPKEY) по скорости, единственное -- он требует много больше PGA
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392160
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
---1.045 sec
with s as (select min(o.OBJECT_ID) as minid, max(o.OBJECT_ID) as maxid
            from all_objects o
           )
SELECT ID 
FROM (SELECT minid + level ID FROM s CONNECT BY minid + level <= maxid + 1) t
 WHERE NOT EXISTS (SELECT NULL FROM all_objects o WHERE o.object_id = t.ID) AND ROWNUM = 1 
;
---1.701 sec
select id_ok 
from (select o.OBJECT_ID, o.OBJECT_ID + 1 as id_ok, lead(o.OBJECT_ID) over (order by o.OBJECT_ID) as next_id
      from all_objects o
      )
where 1 = 1
  and id_ok <> next_id and rownum < 2
;
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392166
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слава, его код выигрывает при решении какой задачи?

У ТС в исходном сообщении не было явно указано, нужен ли первый пропуск или нужны все пропущенные.
Жертве abortа ТС ответил, что решает задачу пропуска файлов по нарастающему идентификатору в имени. Предположу, что его интересует не первый фетч, а полная выборка пропусков.

Также предположу, что в этом вырожденном случае дешевле сгенерировать полный список от min до max и просто вычесть множество поступивших из множества возможных значений (либо вычитанием, либо внешним соединением с фильтром).

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

Т.е. здесь и близко не идёт речи о универсальном определении непрерывного номера документа в многопользовательской среде.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392188
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А про универсальность и речи не было
Он специально подчеркнул про первую дырку (да и вообще про применимость таких задач -- когда там числа с 10 нулями вряд ли эти дырки кого волнуют) и именно это и показывал (хоть и не совсем правильно, с 1 начинал) в своих тестах
И кстати, первым в ветке сказал, что PL/SQL здесь предпочтительней, но по условию задачи нежелателен
Читал все еще вчера, могу и перепутать, а перечитывать лениво
И даже ты говоришь про генерацию номеров и MINUS, а dbpatch именно оспаривал:
-- решение с аналитикой
-- сам подход, что это единственное правильное решение и именно его ожидает Vint на собеседовании

И еще, главное: многие из нас здесь довольно грубоваты в общении, но при том и не обижаемся на ответную грубость. И что-то мне подсказывает, что модератор вмешался по подсказке, и подсказку ему дал не Грекс
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392208
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

Мальчик было ответ на девочки. По-моему довольно симметрично.
Можно анализировать с начала, но имхо конструктивный диалог невозможен.
Мне больше напомнил этого 5232858 , хотя очевидно не он, за 9 лет что-то должно было поменяться.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392216
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудровкогда там числа с 10 нулями вряд ли эти дырки кого волнуют

Если речь о непрерывном номере для определения пропуска файлов с данными, то критичен любой пропуск - как факт потери данных. А уж если счёт идентификатора пошёл на 10 нулей, то данные скорее всего критичны.

Решение с аналитикой позволяет получить диапазон пропусков, поэтому я и пишу, что ТС явно не указал - нужны ли ему все пропуски или только первый.

Технически, если нет многопоточности, то ТС может останавливать обработку "следующего" файла, если номер отличается от предыдущего более чем на 1. Если многопоточность есть в рамках пачки файлов, но данные не зависимы, то решение будет так или иначе упираться в знание о "успешной" нижней границе и нумерации в поступившей пачке. И диапазоны здесь будут не такими уж большими, кмк.

И в этом случае, критичный пропуск - последний номер в предыдущей пачке, т.к. его нельзя определить до поступления следующей пачки, что влияет на "успешную" нижнюю границу.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392218
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров...Давай еще вспомним, что наличие индекса никто не обещал и вся интеллектуальная дискуссия не имеет смысла.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392222
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровИ еще, главное: многие из нас здесь довольно грубоваты в общении, но при том и не обижаемся на ответную грубость.

Что есть, то есть.
Но как тут удержаться, когда "в интернете снова кто-то не прав"
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392239
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopВячеслав Любомудров...Давай еще вспомним, что наличие индекса никто не обещал и вся интеллектуальная дискуссия не имеет смысла.Дык я же не против дискуссии
Я сам с удовольствием за ней следил

Я против такого "одностороннего" вмешательства модератора -- не разобравшись, давай шашкой махать
А тут остались такие "носороги" которым "мальчик"/"девочка" что слону дробина
Но нет, обязательно надо это прекратить

Как же, непарламентские выражения, надо прекратить. Кого бы избрать "козлом отпущения"?
Вот тут есть подозрение, что поступали какие-то звоночки...

Прекрасно, дискуссия закончена, продолжаем сонно дремать
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392246
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopВячеслав Любомудров,

Мальчик было ответ на девочки. По-моему довольно симметрично.
Можно анализировать с начала, но имхо конструктивный диалог невозможен.
Мне больше напомнил этого 5232858 , хотя очевидно не он, за 9 лет что-то должно было поменяться.Все-таки я больше склоняюсь к Грексу/nolocky/техничкину
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392348
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,
"Ваш профиль был отключен администрацией форума. Данная функциональность недоступна." - и так уже пару лет если мне не изменяет память, так что пожаловаться физически не могу...)) да я был груб. и если честно не вполне понимаю зачем его забанили, я заслужил имхо больше) но я как то с этим проживу)
На собеседовании есть вполне конкретная задача с граничными значениями, но сагрился я на фразу "Собеседование? О господи. Кого вы там собеседуете?", а потом уже развлекался. и оспаривал он не аналитику, аналитика в том решении исключительно для красивостей, а он неразобрался что там почем.
опять же все решали разные задачи. жаль что фотошоп раньше времени выдал нахождение первой попавшейся дырки, но я ожидаемо угадал реакцию, типа "pl\sql нельзя"....)) хотя тема давно уже вышла за рамки что можно и нельзя. был разговор исключительно за продакшн решения.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392384
Piper Perri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, получал такую же по T-SQL на собеседовании. Пришлось задуматься, хотел ли собеседующий увидеть это
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if object_id('tempdb..#xx') is not null drop table #xx
select cast('1' as int) n
into #xx
union all select cast('2' as int)
union all select cast('4' as int)
union all select cast('5' as int)
union all select cast('6' as int)
union all select cast('8' as int)
union all select cast('9' as int)

/*-->>> */ select n+1 from #xx where n+1 not in (select n from #xx) and n not in (select max(n) from #xx)



или же отсортированные джойны двух таблиц.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39392398
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piper Perri,

в зависимости что надо получить
(они разные задачи решали)

напр на таких данных

select cast('1' as int) n
into #xx
union all select cast('2' as int)
union all select cast('5' as int)
union all select cast('6' as int)
union all select cast('9' as int)

ps
насчет продакшен, все зависит от рельной задачи

напр у меня
софт требовал номера кассиров строго две цифры
быстро дошли до 99
дальше искали дырку
работа почти в монопольном режиме (прием на работу)
обьем выботки < 100 строк

зыы
все-таки не удержался

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


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