|
|
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
За годы работы с Ораклом у меня накопилось множество заметок, ссылок и прочих материалов, информацию из которых я оформил в виде книги. The Power of Oracle SQL После мучительных размышлений на каком языке писать я таки решил сначала изложить на русском, но содержание осталось на английском. Содержание Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. По некоторым конструкциям (model, recursive subquery factoring) в рунете доступно описание только базовых вещей, а по pattern matching вообще практически никаких материалов нет. Цель была максимально всесторонне описать возможности оракловой реализации конструкции SELECT, при этом стремясь к простоте насколько это возможно и минимизации лишних деталей. Под лишними деталями понимается * внутренности оракла от защелок до принципа работы буфферного кеша * оптимизация работы операций плана, например, nested loops batching * различные баги и кривизна текущей реализации, от wrong results и ORA-03113 до возникновения чтений блоков в режиме currect при большом числе проходов в recursive subquery factoing * прочие моменты, при углублении в которые, объем заметно бы вырос, например, особенности производительности сортировки при использовании аналитических функций * какие-то недоработки SQL парсера: возможность менять местами anchor and recursive members для recursive subquery factoring, возможность перечислять несколько connect by подряд, из которых все, кроме последнего будут проигнорированы итд * все остальное, что не меняет сути По простому говоря фокус был на имеющейся мощи для получения данных. Комментарии и корректировки приветствуются. Огромная благодарность RA\/EN, andrey_anonymous, andreymx за их отзывы и замечания. PS. Книга из двух частей. Вторую часть планирую закончить позже в феврале. tagsnative syntax traditional oracle outer joins syntax ansi left right full cross inner equi theta natural semi anti start with connect by prior nocycle level connect_by_iscycle sys_connect_by_path connect_by_root connect_by_isleaf search depth breadth first by set model dimension measures rules return updated rows return all rows currentv cv update upsert all upsert sequential order automatic order iteration_number previous reference unique dimension unique single reference presentv presentnnv ignore nav keep nav match_recognize pattern define all rows per match one row per match final running match_number classifier with unmatched rows show empty matches omit empty matches after match skip Ссылка: The Power of Oracle SQL. All versions ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 05:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, пошел читать... З.Ы. Как вторую часть допишешь - сообщить не забудь. Обязательно почитаю и её тоже. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 05:50 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Было бы интересно узнать твоем мнение, учитывая что ты как и я достаточно много времени посвятил MSSQL и есть с чем сравнивать. Кстати, изначально планировал еще три главы Сравнение возможностей SELECT для Oracle vs MSSQL. По причине наличия явного лидера и во избежания холивара отказался от затеи. SQL для работы с графами. Это исключил, т.к. SQL это НЕ для работы с графами за исключением вырожденных случаев. С другой стороны анализ процедурного и декларативного подходов потребовал бы много текст и кода. А на самом деле есть Graph Databases. Желающим расширить кругозор - рекомендую Next Generation Databases - Guy Harrison . Особенности DML в Oracle. Например, про update при наличии join или conventional vs direct path inserts и подобное. Это всё есть в блогах известных товарищей и прочих местах и заниматься просто компиляцией несколько нудно. А главное эти три темы выходят за рамки основной идеи книги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 06:12 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Отдельное спасибо за model! Да и вообще за книгу в целом! Взял на вооружение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 11:15 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 12:24 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, спасибо, читаемс) замечанию тут собирать будешь или лучше на почту?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 12:28 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, буду писать сразу как читаю. иначе забуду. 1. пронумеруй, пожалуйста примеры. на странице 8 сложновато читать что там первый третий что второй пятый.... номера примеров должны быть. 2. страница 9 запрос: Код: plsql 1. 2. 3. 4. ничем не отличается от запроса Код: plsql 1. 2. 3. поэтому тестовые данные для нормального осознания отличий должны быть хотя бы такие: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 13:05 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Vintdbms_photoshop, спасибо, читаемс) замечанию тут собирать будешь или лучше на почту?)Предпочтительнее одним письмом все и сразу в почту. Форма свободная. Точно не стоит обращать внимание на грамматику и пунктуацию, хотя, уверен, ты бы этого и не делал. Вторая часть, где будут конкретные примеры, больше предполагает обсуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 13:16 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Vint...Принято. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 13:20 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, ок. тогда буду выписывать себе в отдельный документ потом пришлю) правда думаю до конца недели точно читать буду)) если честно немного тяжеловато написано. ну или мозги у меня немного в паутине)) заодно и уборку проведу)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 13:20 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВторая часть, где будут конкретные примеры задачиFixed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 13:26 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Vintесли честно немного тяжеловато написаноПосле главы про джойны легче пойдет. Инфа 146%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 13:51 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Круто. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 14:05 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
жалко, что не освещена тема adaptive query optimization. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 14:10 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
хотя наверное это усложнит ей, хотя по ней запросы весьма существенно переписываются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 14:29 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Shtockжалко, что не освещена тема adaptive query optimization.Когда человек анализирует как лучше написать запрос он не очень то думает про adaptive query optimization, не так ли? То есть, это, опять же, несколько выходит за концепцию книги. Ну и, во-вторых, в англо-интернетах достаточно качественного материала. Вот понимание про наличие трансформаций может значительно помогать при написании запросов. Читая про них можно встретить. В Oracle 12c для воспроизведения надо отключить адаптивные планы с помощью команды «alter session set optimizer_adaptive_reporting_only = true;»То есть, я предпочитаю не усложнять без надобности. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 14:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Можно было бы указать какие версии подходят под твой мануал. Еще думаю, можно было бы включить рассмотрение TOP - N и "новых" фич SQL типа OFFSET, FETCH FIRST WITH TIES, CROSS APPLY / OUTER APPLY и их применение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:08 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
ora601dbms_photoshop, Можно было бы указать какие версии подходят под твой мануал. Еще думаю, можно было бы включить рассмотрение TOP - N и "новых" фич SQL типа OFFSET, FETCH FIRST WITH TIES, CROSS APPLY / OUTER APPLY и их применение)Про версии сказано во вступлении. Про CROSS APPLY / OUTER APPLY описано в главе про соединения. Про новые фичи множество статей. Хорошая подборка из 5-ти частей - в гугл "Ask Tom: On Oracle Database 12c, Part". В целом, фичи, которые расширили возможности SQL, полагаю, упомянуты: усовершенствования для joins и pattern matching. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:24 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
распространяется бесплатно ? а где тогда кнопка "поддержать автора" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:32 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
grokраспространяется бесплатно ? а где тогда кнопка "поддержать автора" ?Всё бесплатно, без рекламы и смс. Автор будет благодарен отзывам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:43 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Спасибо, на работе начал читать Сразу -- не очень формализировано, что ли, разъяснена разница в post- и pre- предикатах в описании соединений Что, когда, исключения... (одно описано достаточно интересно) Ну и операция FILTER -- я ее так и не смог формализовать, что у Льюиса, вот думал хоть здесь, на понятном русском. Похоже, она выполняет все, на что не нашлось других названий (проскочила фраза, типа "отборка по критерию из другого источника", но это как-то слишком общно, на мой взгляд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:53 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Познавательно, спасибо. Буду ждать второй части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 17:03 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровСразу -- не очень формализировано, что ли, разъяснена разница в post- и pre- предикатах в описании соединенийДопускаю, что не очень формализированно, но мне казалось достаточно конкретно и понятно. Еще была мысль при введении специфических Оракловых терминов сделать сноски со ссылками на ноты для желающих полной формальности. pre/post join predicates (Doc ID 14736.1) transitive closure (Doc ID 68979.1) Это добавлю. Вячеслав ЛюбомудровНу и операция FILTERВот это зачетная тема, и если раскрывать, то надо выделять методы соединения в отдельную главу. Я полагаю механика работы похожа на nested loops, то-есть для каждой строки выполняется грубо говоря look-up. Но есть отличия - nested loops связывает два набора, а фильтров (и соответственно выполнения связанного набора) может быть несколько, при этом один набор основной. - в фильтре может быть скоррелирован более хитрый запрос (точнее это было актуально до появления lateral views), например, connect by. Код: plsql 1. 2. 3. 4. 5. Возникает, при наличии подзапросов в where, которые не были трансформированы. Ясно дело, до формализации тут еще далеко. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 18:11 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Кстати, наверное нет смысла уже это упоминать, но у transitive closure в 9 (10?) был очень нехороший эффект -- чрезмерное размножение предикатов и, как следствие, неправильная оценка кардинальности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 18:17 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Regular expression - было бы хорошо добавить. или не было заметок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 20:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
HelpMePlsRegular expression - было бы хорошо добавить. или не было заметок?Так регулярки - это не SQL, получается отклонение от темы. Материалов масса, вплоть до оракловых White Paper - Introducing Oracle Regular Expressions . Интереснее было бы написать сравнение оракловой реализации скажем, с perl, чтоб показать ограниченность первой. Для этого легко можно подобрать с десяток реальных задач даже только с этого форума. Я как-то публиковал краткий обзор Evolution of regular expressions . Дальше развивать тему не особо интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 21:12 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, 83 страница: Например, имеет информация по продажам за 12 месяцев и надо для каждого месяца отношение объема продаж к значению для первого месяца. ... select id, value, value / min(value) over() ratio from t может first_value(value) over() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 09:54 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Почту отправить не могу, поэтому пишу отзыв сюда. 1) Отличная глава про джоины! К стыду своему узнал кое-что новенькое в такой, скажем, базовой теме. А остальное отлично разложено по полочкам, не грех повторить и уложить в голове лишний раз. 2) А вот самые интересные для меня главы про model и match_recogzine показались слабее. Я не мастер model, но не нашел почти ничего нового и полезного по сравнению со старенькой статьей на Хабре ( https://habrahabr.ru/post/101003/), которая, как мне кажется, более доступна людям, не знакомых с данным оператором. 3) Почему мне так кажется? Потому что к главе про match_recogzine я подошел абсолютно нулевым, в надежде первый раз узнать про данный чудо-оператор, и... ничего не понял. Совсем. Ну, первая моя мысль, что наверно я просто туплю, но, как оказалось, достаточно быстро нагугливается переведенная статья Кайта ( http://www.fors.ru/upload/magazine/09/http_text/fors_article_kyte.html), которая разбирает похожий пример, но делает это гораздо, гораздо понятней и наглядней. После данной статьи я снова перечитал главу из книги, и пришел к тому же выводу что и для главы про model: не знакомому понятно сложно, а знакомый не найдет много нового и полезного. В общем, хочется больше поясняющего текста, более плавный переход от простого к сложному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 10:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
moishamiem2) А вот самые интересные для меня главы про model и match_recogzine показались слабее. Я не мастер model, но не нашел почти ничего нового и полезного по сравнению со старенькой статьей на Хабре ( https://habrahabr.ru/post/101003/), которая, как мне кажется, более доступна людям, не знакомых с данным оператором.Ну давай разложим по полочкам. Начнем с хабровской статьи. Прежде всего неверно отражена суть с самого старта Модель для "подсчёт промежуточных итогов по подгруппам, ..., сложное форматирование строк"?Далее: Аналитические функции внутри правил запрещены.Да? Применение конструкции MODEL запрещает использовать агрегатные функции внутри других блоков SELECT.Что? Важно знать, что UPSERT ALL работает...Не так он работает. Директива AUTOMATIC ORDER используется для того, чтобы p1 и p2 считались по очереди для текущего отрезка.Категорически неверно. Правила всегда вычисляются по столбцам а не строкам. С производительностью всё просто.Только написана полная чепуха. Стоит заметить, что хабровская аудитория отлично проглотила статью, а другого я от неё и не ожидал. Я ничего не увидел про ссылочные (reference) модели, про несходимые модели (does not converge) и множество прочих деталей от ограничений на правила до особенностей итеративных моделей. Анализ производительности нельзя воспринимать всерьез. moishamiem3) Почему мне так кажется? Потому что к главе про match_recogzine я подошел абсолютно нулевым, в надежде первый раз узнать про данный чудо-оператор, и... ничего не понял. Совсем. Ну, первая моя мысль, что наверно я просто туплю, но, как оказалось, достаточно быстро нагугливается переведенная статья Кайта ( http://www.fors.ru/upload/magazine/09/http_text/fors_article_kyte.html), которая разбирает похожий пример, но делает это гораздо, гораздо понятней и наглядней. После данной статьи я снова перечитал главу из книги, и пришел к тому же выводу что и для главы про model: не знакомому понятно сложно, а знакомый не найдет много нового и полезного.У Кайта было про сравнение с аналитикой? Или про ограничения? Или про фишку с permute? Или про {--} и "with unmatched rows"? Etc. А хоть краткий обзор производительности? (в эту тему будет некоторое углубление во второй части) moishamiemВ общем, хочется больше поясняющего текста, более плавный переход от простого к сложному.Учитывая аргументацию и выводы, я полагаю, что ты до сих пор не очень понял ни model ни pattern matching. В том смысле для чего инструмент, что с помощью него можно решить, а что нет и базовые best practices. Формулировки "мне кажется" или "ничего не понял" это на уровне домохозяйки, которая звонит в тех поддержку. У других отозвавшихся именно по этим двум разделам были диаметрально противоположные отзывы, но я подумаю как сделать текст более понятным. Текущий объем 114 страниц, и полагаю, чтоб реализовать "более плавный переход от простого к сложному" надо страниц 250. Это не выход. Чтение подразумевает пользование гуглом при необходимости. Ну и я отдаю себе отчет, что в повествовании делается достаточно быстрое погружение в тонкости, так что у меня нет иллюзий что книга будет интересна не разработчикам БД. Даже толковый джавист или сишарпник быстро отложит в сторону с вердиктом "ничего нипанятна". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 13:51 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
moishamiem, Ну и спасибо за отзыв. Без обид. Я понимаю, что всем всё равно не угодишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 13:53 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
piheldbms_photoshop, 83 страница: Например, имеет информация по продажам за 12 месяцев и надо для каждого месяца отношение объема продаж к значению для первого месяца. ... select id, value, value / min(value) over() ratio from t может first_value(value) over() ?Да, спасибо, надо поправить. либо Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 14:01 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Да, конечно, без обид. Автору виднее как и для кого писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 14:35 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
фотошоп нагенерировал фибоначчи через connect by, а столько воплей раньше было, что это невозможно)) про модель просто шикарно) когда вторая часть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 22:02 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Стр. 7До версии 9i в Oracle не было поддержки ANSI соединений, поэтому для соединения таблиц, их имена необходимо было перечислить во from и указать условия соединения в where. Oracle-specific syntax для соединений был впервые реализован в версии Oracle 6 . В ORACLE v5 и v4 был такой синтаксис. Предполагаю, что он же был и раньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 21:24 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
оси лил целикомкогда вторая часть?По не зависящим от меня обстоятельствам несколько изменились приоритеты. Но работа потихоньку идет. Осталась одна глава и итоговая версия ожидается до конца апреля. SQL*Plusdbms_photoshop, Стр. 7До версии 9i в Oracle не было поддержки ANSI соединений, поэтому для соединения таблиц, их имена необходимо было перечислить во from и указать условия соединения в where. Oracle-specific syntax для соединений был впервые реализован в версии Oracle 6 . В ORACLE v5 и v4 был такой синтаксис. Предполагаю, что он же был и раньше.Я подразумевал внешние соединения, но из процитированного абзаца это совершенно непонятно. Надо переформулировать. Спасибо. https://blogs.oracle.com/optimizer/entry/outerjoins_in_oracle ince release 6, Oracle has supported a restricted form of left outerjoin, which uses Oracle-specific syntax. In 9i, Oracle introduced support for ANSI SQL 92/99 syntax for inner joins and various types of outerjoin. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 23:20 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Спасибо за книгу!=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2017, 08:40 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopоси лил целикомкогда вторая часть?По не зависящим от меня обстоятельствам несколько изменились приоритеты. Но работа потихоньку идет. Осталась одна глава и итоговая версия ожидается до конца апреля. SQL*Plusdbms_photoshop, пропущено... В ORACLE v5 и v4 был такой синтаксис. Предполагаю, что он же был и раньше.Я подразумевал внешние соединения, но из процитированного абзаца это совершенно непонятно. Надо переформулировать. Спасибо. https://blogs.oracle.com/optimizer/entry/outerjoins_in_oracle ince release 6, Oracle has supported a restricted form of left outerjoin, which uses Oracle-specific syntax. In 9i, Oracle introduced support for ANSI SQL 92/99 syntax for inner joins and various types of outerjoin.Посмотрю сохранившуюся документацию по ORACLE v5 в переводе РДТеХ.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2017, 23:42 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Спасибо за статью!!! осилил не знал о dbms_sql2.expand_sql_text не понял фразы стр 41 Если <order by> указано, то окно определяется от первой строки секции и до текущей если не указано другое стр54 Подобная сортировка не гарантирует сортировку корневых узлов, поскольку нельзя сказать, что они имеют общего родителя. имхо, ето был баг Код: 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. стр 56 То есть если в условие соединения добавить level <= 1 и level <= 0, то в любом случае будут возвращены все строки первого уровня. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. стр 57 Ключевой момент при использовании connect by - это то, что невозможно генерировать дочерние значения на основании родительских. возможно имелось ввиду ВЫЧИСЛЕННЫХ родительских стр Для того, что выводились сначала дочерние элементы текущего узла, а потом остальные элементы на том же уровне необходимо использовать конструкцию search depth first - иными словами выполняется обход в глубину. По умолчанию результат выводится по уровням (search breadth first) - обход в ширину. Подобное поведение нельзя контролировать для connect by, при котором обход всегда выполняется в глубину. невозможно что сделать? стр 75 Всегда имеет смысл указывать сортировку в левой части правил содержащих диапазоны ячеек, поскольку - в таком случае улучшается производительность почему улучшается? стр 93 какую задачу решает пример (хотел проверить на 94стр ) еще раз СПАСИБО за труд ps если не трудно прономеровать примеры (сквозная или по разделам номерация) ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2017, 17:11 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
stax.. стр 56 То есть если в условие соединения добавить level <= 1 и level <= 0, то в любом случае будут возвращены все строки первого уровня. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2017, 17:54 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
условие совокупленияstax.. стр 56 То есть если в условие соединения добавить level <= 1 и level <= 0, то в любом случае будут возвращены все строки первого уровня. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 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. пример когда то в любом случае будут возвращены все строки первого уровня ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2017, 18:41 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
stax..не понял фразы стр 41 Если <order by> указано, то окно определяется от первой строки секции и до текущей если не указано другоеИмелось в виду, что Код: plaintext Код: plaintext Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plsql 1. 2. 3. 4. 5. 6. 7. stax..стр54 Подобная сортировка не гарантирует сортировку корневых узлов, поскольку нельзя сказать, что они имеют общего родителя. имхо, ето был багПокажи где в доке/металинке указано, что гарантирует или что то был баг. stax.. стр 56 То есть если в условие соединения добавить level <= 1 и level <= 0, то в любом случае будут возвращены все строки первого уровня. Запрос не возвращает строк не из-за условия соединения, а из-за того, что условие старта не возвращает ни одной строки. Иными словами: если условие старта возвращает некоторые строки, а условие соединения заведомо ложное, то результат не будет пустым. stax..стр 57 Ключевой момент при использовании connect by - это то, что невозможно генерировать дочерние значения на основании родительских. возможно имелось ввиду ВЫЧИСЛЕННЫХ родительскихДа, так точнее. У меня эта формулировка встречалась несколько раз, вероятно в одном из случаев сформулировано недостаточно точно. stax..стр Для того, что выводились сначала дочерние элементы текущего узла, а потом остальные элементы на том же уровне необходимо использовать конструкцию search depth first - иными словами выполняется обход в глубину. По умолчанию результат выводится по уровням (search breadth first) - обход в ширину. Подобное поведение нельзя контролировать для connect by, при котором обход всегда выполняется в глубину. невозможно что сделать?Невозможно обойти дерево в ширину с помощью connect by. Можно rec with или моделью для любителей экзотики. stax..стр 75 Всегда имеет смысл указывать сортировку в левой части правил содержащих диапазоны ячеек, поскольку - в таком случае улучшается производительность почему улучшается?stax.. какую задачу решает пример (хотел проверить на 94стр ) На эти два момента позже отвечу. Пора бежать. Спасибо за отзыв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2017, 20:11 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, авторПокажи где в доке/металинке указано, что гарантирует или что то был баг. наоборот, где сказано что левел 1 не сортируется имхо был баг, Елик предлагал искуственно вводить корень авторЗапрос не возвращает строк не из-за условия соединения, а из-за того, что условие старта не возвращает ни одной строки. Иными словами: если условие старта возвращает некоторые строки, а условие соединения заведомо ложное, то результат не будет пустым. не понимаю я русский стартовый возвращает Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. стартовый вернул три строки добавляю (раскоментирую) level<=0 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. где то результат не будет пустым ? Код: plsql 1. 2. понятно что разные алгоритмы (и разные для разных версий оракля), но не проблема ж с имитацией вширь connect by Код: 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. Кстати надо проверить обходит ли with вглубь, терзают меня смутные сомнения ps как копировать отмеченное в хххх? ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2017, 20:43 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
stax.. Кстати надо проверить обходит ли with вглубь, терзают меня смутные сомнения ...... stax создаем ф-цію, будет запомінать последовательнось вызовов в формате <id/level.rownum) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. выполняем рекурсивный with в ширину Код: 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. надеюсь траса понятна сначала первый уровень (2,3,11), потом второй (4,13,12, причем, 13 перед 12, нет сортировки), ..., последним третий уровень 5 все согласно построения вширь добавляю search depth first by id set ord Код: 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. и что мы видим траса не изменилась, банально оракля вывел аля connect by siblings если бы обход шел вглубь то напр для 4 было бы <2/1.1> <3/1.2> <4/2.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. как и ожидалось первый уровень 2, нет детей переходим к 3-ке дальше детят 3, детя 4,... у 5 нет детей, опускаемся на уровень ниже до уровня 1, след 11, его дети,..., опускаеся уровнями ниже строк нет, выход ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2017, 22:10 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopstax..не понял фразы стр 41 Если <order by> указано, то окно определяется от первой строки секции и до текущей если не указано другоеИмелось в виду, что Код: plaintext Код: plaintext Это не совсем так, default windowing clause - Код: plaintext Regards Maxim ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2017, 23:47 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Maxim Demenko, очепятался rows - range ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2017, 01:43 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Maxim Demenko default windowing clause - Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2017, 11:54 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
stax..стартовый вернул три строки добавляю (раскоментирую) level<=0Давай вернемся к тому, что написал я Еще одним важным моментом является то, что проверка условия connect by выполняется после возврата строк на текущем уровне. То есть если в условие соединения добавить level <= 1 и level <= 0, то в любом случае будут возвращены все строки первого уровня. Строки первого уровня должны удовлетворять условиям start with и where если таковые имеются. условие соединения - предикат в connect by условие фильтрации - предикат в where Выполни это Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. stax..и что мы видим траса не измениласьПуть от корня к узлу и не должен был меняться. stax..Кстати надо проверить обходит ли with вглубьА вот здесь я ожидал, что при указании breadth first/depth first меняется алгоритм обхода, но по факту меняется только порядок выдачи, а обход всегда в ширину. Итак, есть дерево с двумя ветками. В первой узел с именем ABC ближе к концу, а во-второй ближе к корню. Задача найти ближайший узел с именем ABC. Код: plsql 1. 2. 3. 4. 5. 6. 7. Во втором случае я ожидал, что первая ветка будет обойдена до ABC, но ее обход остановился из-за того что ABC было встречено во второй ветке. нежданчик Код: 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. То есть фраза https://docs.oracle.com/cd/E11882_01/server.112/e41084/queries003.htm subquery_factoring_clause, which supports recursive subquery factoring (recursive WITH) and lets you query hierarchical data. This feature is more powerful than CONNECT BY in that it provides depth-first search and breadth-first search Не очень правдива. Алгоритм обхода всегда в ширину. Меняется только порядок выдачи результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2017, 19:30 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
row_number()Maxim Demenko default windowing clause - Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2017, 19:38 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
stax..стр 75 Всегда имеет смысл указывать сортировку в левой части правил содержащих диапазоны ячеек, поскольку - в таком случае улучшается производительность почему улучшается?Потому что Ораклу не надо применять никакие механизмы для определения зависимостей между правилами. Зависимости могут быть как между строками так и между столбцами. По умолчанию Ораклу не надо анализировать зависимости между столбцами, т.к. применяется sequential order. Если применяется automatic order, то Оракл анализирует зависимости между столбцами (при наличии правил, где одна мера вычисляется на основании другой) Чтоб зависимости в рамках строк тоже были очевидны - имеет смысл указывать order by. При отсутствии order by Ораклу надо анализировать зависимости между строками (при наличии правил, где текущее значение меры вычисляется на основании значений для других строк) Как пример - рекурсия, зависящая от предыдущей строки Код: 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. stax..стр 93 какую задачу решает пример (хотел проверить на 94стр ) Нумерует птичек (\/) у которых одно из крыльев может отсутствовать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2017, 20:20 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopstax..стартовый вернул три строки добавляю (раскоментирую) level<=0Давай вернемся к тому, что написал я Еще одним важным моментом является то, что проверка условия connect by выполняется после возврата строк на текущем уровне. То есть если в условие соединения добавить level <= 1 и level <= 0, то в любом случае будут возвращены все строки первого уровня. Строки первого уровня должны удовлетворять условиям start with и where если таковые имеются. условие соединения - предикат в connect by условие фильтрации - предикат в where Выполни это Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. понял, правильное поведение отработал start with дальше по условию нет родителей, остаются только корни я под "условие соединения" понимал условия join тоесть у меня в иерархическом как минимум 4 типа условий в моей трактовке 1) уловие соединения e.empno=rr.r(+) 2) условие определения корня r is not null 3) условие построения иерархии (поиска детей) e.mgr = prior e.empno 4) условия фильтрации (and level<=1 and level<=0 закоментированы) dbms_photoshopstax..стр 75 Всегда имеет смысл указывать сортировку в левой части правил содержащих диапазоны ячеек, поскольку - в таком случае улучшается производительность почему улучшается?Потому что Ораклу не надо применять никакие механизмы для определения зависимостей между правилами. Зависимости могут быть как между строками так и между столбцами. По умолчанию Ораклу не надо анализировать зависимости между столбцами, т.к. применяется sequential order. Если применяется automatic order, то Оракл анализирует зависимости между столбцами (при наличии правил, где одна мера вычисляется на основании другой) Чтоб зависимости в рамках строк тоже были очевидны - имеет смысл указывать order by. При отсутствии order by Ораклу надо анализировать зависимости между строками (при наличии правил, где текущее значение меры вычисляется на основании значений для других строк) Как пример - рекурсия, зависящая от предыдущей строки Код: 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. сортировка не обязательно уникальная, и всеравно надо что-то там анализировать мож просто меньше вариантов вопрос для меня спорный, но почему-то работает пример спицифический, сортировка по id и правило с ид cv(id)-1 поверю на слово (кстати, в статье в примерах сортировка не всегда прописана) dbms_photoshop То есть фраза https://docs.oracle.com/cd/E11882_01/server.112/e41084/queries003.htm subquery_factoring_clause, which supports recursive subquery factoring (recursive WITH) and lets you query hierarchical data. This feature is more powerful than CONNECT BY in that it provides depth-first search and breadth-first search Не очень правдива. Алгоритм обхода всегда в ширину. Меняется только порядок выдачи результата. и не менняется присвоение rownum, в отличие от connect by dbms_photoshop Я вроде про вертикальные/горизонтальные зависимости довольно много говорил когда писал про цикличность моделей. stax..стр 93 какую задачу решает пример (хотел проверить на 94стр ) Нумерует птичек (\/) у которых одно из крыльев может отсутствовать. :) на 94стр, пример о банкомате что делают правила понятно, не понятно какую жизненную задачу решает не надо обяснять, никому кроме меня не интересно СПАСИБ!!! ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 16:33 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Спасибо, познавательный труд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 15:32 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
!Спасибо за труд! Очень познавательно. Особенно понравилось то, что много примеров и легко их воспроизвести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 06:32 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
На странице 23 получается небольшая неточность Запрос заполняет табличку днями недели Код: plsql 1. 2. 3. 4. У меня, например, заполняется русскими названиями, из-за этого некорректно будет отрабатывать запрос где сравнение идет по дням недели (on w.day = p.day) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 06:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Mr_Muscle, Спасибо, учту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 11:57 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
SQL*Plusdbms_photoshopпропущено... Я подразумевал внешние соединения, но из процитированного абзаца это совершенно непонятно. Надо переформулировать. Спасибо. пропущено... Посмотрю сохранившуюся документацию по ORACLE v5 в переводе РДТеХ.. Посмотрел. Подтверждаю, что в ORACLE v5 использовали (+) для указания внешних соединений. SQL*Plus. Руководство пользователя. Версия 2.0 Подготовлено к печати 24 марта 1991 г. SQL*Plus User's Guide Version 2.0 Part No. 3201-V2.0 July 1987 Внешние соединения (стр. 76) Код: plsql 1. 2. 3. 4. Потом сделаю скан этой страницы и размещу здесь, чтобы осталась для истории... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 12:52 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
v5 Код: plaintext 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 13:03 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Elicv5 Это ещё одно подтверждение про (+) в ORACLE v5. Может быть у кого-то остались описания от ORACLE v4? Советская версия называлась КАРС, КАРС-32 (Корневая Автоматизированная (?) Реляционная Система). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 13:17 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Валерий Юринский, Вот и верь после этого сотрудникам Оракла. :)) Хотя я помню, что не только у госпожи Колган встречал про шестую версию. На сайте Оракла можно нагуглить такой антиквариат http://www.oracle.com/technetwork/database/database-technologies/rdb/0307-sql1999-130211.pdf Basic joined tables: Inner joins, right and left outer joins, with full nesting with arbitrary comparison operators. Rdb has supported this feature since V6.0. В других местах пишут, что old style синтаксис реализован по стандарту SQL-86. В третьих местах пишут, что в SQL-86 ничего не было про внешность соединений и некоторые вендоры реализовывали по своему усмотрению. http://in2test.lsi.uniovi.es/sqlfpc/?lang=en#sql86joins The SQL86 standard does not specify outer joins. However, there are some DBMS vendor specific ways to indicate outer joins which are now supported. Given a join condition in the WHERE over columns a and b of the joined tables, the following outer joins are supported: Oracle: a = b (+) (left), a (+) = b (right) SQL Server: a *= b (left), a =* b (right)Похоже на правду, в МССКЛ даже на последних версиях работает эта техника со звездочками. А вообще насколько я понял 4-я версия была даже не клиент-серверной, так что в те дебри не особо интересно уже лезть. Раньше у меня было несоклько pdf c историческими вехами, но некоторые все еще просто гуглятся на сайте Оракла. http://www.oracle.com/us/corporate/profit/p27anniv-timeline-151918.pdf 1985 Oracle keeps pace with emerging computing models with the release of Oracle Version 5, one of the first relational database systems to operate in client/server environments. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 13:37 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВалерий Юринский, А вообще насколько я понял 4-я версия была даже не клиент-серверной, так что в те дебри не особо интересно уже лезть. Раньше у меня было несоклько pdf c историческими вехами, но некоторые все еще просто гуглятся на сайте Оракла. [/quot] В нашей книге "Oracle7: Практическое руководство" (М., Софтсервис, 1997) я привел историческую информацию, почерпнутую из большого текста, найденного в конференции Usenet. Это был перевод на русский язык. P.S. Книжку уже отсканировали. Жду, когда распознают в текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 13:47 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Автор, а куда вы выкладываете новую версию книги, в первом сообщение есть ссылка на книгу, но там версия 1.0. или 1.0 пока и есть последняя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 15:14 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
rekrabbeпока и есть последняя?Да. PS. К сожалению, движок wordpress не позволяет удалить файл и загрузить с тем же именем, так что новую ссылку выложу здесь позже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 15:20 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, блин как-то пропустил тему. Сейчас в "курилке" увидел сообщение про книгу, почитаю на досуге. Спасибо за труд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2017, 15:55 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Работа завершена. Получилось "немного" позже чем конец февраля, но вторая часть оказалась несколько насыщеннее, чем предполагалось. Итого опубликовано 15 задач, которые решаются разными специфическими фичами Oracle SQL. Все примеры из реальной жизни (ну ладно, кроме Zeckendorf representation и Quine :)), определенное влияние на контент, безусловно, оказано общением на sql.ru Хотел бы выразить благодарность Elic, SY, -2-, wurdu, andrey_anonymous, RAVEN, Sayan Malakshinov, orawish, Vladimir Sitnikov, anrdeymx, Nikotin_, suPPLer, Vint, stax, всех сложно перечислить. Sayan Malakshinov и orawish повлияли напрямую - во второй части от них использовано по одному PL/SQL алгоритму. Некоторые задачи планировал опубликовать как пятничные, но в итоге таки воздержался. Если кто придумает более элегантные/производительные решения - просьба продемонстрировать. В summary ко второй части таблица со спискам задач и приемами, использованными в решении . Для некоторых можно было включить дополнительные приемы, но поскольку они не вносили никакой новизны и не являются привлекательными с точки зрения производительности - этого сделано не было. Вторая часть более практическая и меньше первой по объему, полагаю читать ее увлекательнее чем первую, хотя, местами, может быть и сложнее. Критика и комментарии приветствуются. Все версии книги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 01:27 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Кстати, пару человек после первой части мне говорили "не слишком ли ты восхваляешь pattern matching? неплохо бы больше фактов". Надеюсь это требование удовлетворено. Еще важный момент что все скрипты для исходных данных находятся непосредственно в книге и в тех случаях, когда использовано dbms_random.seed, стоит про него не забывать для воспроизводимости результатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 01:31 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Thx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 09:07 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop Задача: для таблицы с числами получить сумму их всех возможных комбинаций ... Если бы в таблице были только первые три строки, select * from t_num where id < =3; ID NUM1 1 2 4 3 9 то были бы такие комбинации чисел 1 + 4 = 5 1 + 9 = 10 4 + 9 = 13 1 + 4 + 9 = 14 и итоговая сумма 5 + 10 + 13 + 14 = 42 Садись, два. Сами числа исходной таблицы есть комбинации. Правильный ответ - 42 + 14 = 56 dbms_photoshop На SQL это решается, если сгенерировать все возможные перестановки (как минимум два способа с помощью connect by) и затем для перестановки посчитать сумму. Вычисление суммы всех возможных комбинаций не требует "генерации" последовательностей . Поэтому не требуется ни 25 секунд, ни 10-и, ни, даже, 0,5-и. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Видать, бином Ньютона, в средней школе, как-то мимо тебя просклизнул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 17:00 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
booby, Замечательно, что ты получил "true_result", только это не то, что требовалось в задаче. Перечитай что требуется еще раз. Если вопросы останутся - можно поговорить, если ты изменишь стиль. В сгенерированных данных может быть какая-то магия (хотя я ее пока не вижу), но речь идет про общий случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 17:16 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, магия, вопросы... Смешной ты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 17:19 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВ сгенерированных данных может быть какая-то магия (хотя я ее пока не вижу), но речь идет про общий случай.Точнее, учитывая вполне фиксированную формулу для генерации можно вывести формулу для суммы всего, но это не то, что требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 17:19 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
boobydbms_photoshop, магия, вопросы... Смешной ты.Спасибо за твое замечание, booby. Хорошего дня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 17:21 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, a1+a2+a3 + (a1+a2+a3) + (a1+a2) + (a1+a3) + (a2+a3) =4(a1 + a2 + a3) Ну и дальше школьная математика в аппроксимации на N элементов. А вообще это действительно следствие из бинома Ньютона Пример не самый удачный получился. Для таких задач полно уже выведенных формул в комбинаторике. А вот для задачи с комбинациями строк таких формул сильно меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 11:16 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
env, Целью надо сделать получение таблицы с комбинациями, а не их суммы. Это упрощение было лишним. Там дальше еще встречается сравнение запросов с select sum(...) вместо select * для того, чтоб минимизировать фетч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 11:42 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopКстати, изначально планировал еще три главы ... Особенности DML в Oracle. Например, про update при наличии join ... и подобное. Это всё есть в блогах известных товарищей и прочих местах и заниматься просто компиляцией несколько нудно. А главное эти три темы выходят за рамки основной идеи книги. Я вот не припомню, чтобы в книгах по оракл было про апдейт или дилит с джойнами. В отличие от книг по MySQL или MS SQL. По-моему, это базовая вещь и обязательно должна присутствовать в любой книге по sql. Странно это. Или имелось в виду что-то отличное от Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 17:17 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
мегамозг, открой для себя merge ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 17:43 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
мегамозгЯ вот не припомню, чтобы в книгах по оракл было про апдейт или дилит с джойнами.RTFM Updating a Join View (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 17:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
мегамозг, Я думал об этом написать, но описание самого апдейта требует много деталей и, кроме того, тянет за собой обсуждение merge и сравнение с реализацией update хотя бы в MSSQL. Мне не встречалось всестороннее освещение вопроса, хотя по отдельным моментам неплохие статьи есть. Вообще я это уже упомянул 20168274 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 17:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Vintмегамозг, открой для себя merge Ты имеешь в виду merge как update/insert по совпадению? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 17:47 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
мегамозгdbms_photoshopКстати, изначально планировал еще три главы ... Особенности DML в Oracle. Например, про update при наличии join ... и подобное. Это всё есть в блогах известных товарищей и прочих местах и заниматься просто компиляцией несколько нудно. А главное эти три темы выходят за рамки основной идеи книги. Я вот не припомню, чтобы в книгах по оракл было про апдейт или дилит с джойнами. В отличие от книг по MySQL или MS SQL. По-моему, это базовая вещь и обязательно должна присутствовать в любой книге по sql. Странно это. Или имелось в виду что-то отличное от Код: sql 1. 2. 3. 4. Ну и лучше отсутствие update join для общего случая (хотя лучше бы был) чем молчаливая недетерминированность как в MSSQL. update from + exception Это все равно что скалярный подзапрос возвращает боле одной строки, а СУБД берет произвольно любую из них и успешно выполняет запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 17:53 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
мегамозгVintмегамозг, открой для себя merge Ты имеешь в виду merge как update/insert по совпадению? Почему бы тебе сначала не отправиться в поиск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 17:58 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Печатное издание книги планируется или я всё пропустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 17:13 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
env, Только на английском. Должно выйти в январе - феврале. Весной буду в Москве, презентую. При переводе были некоторые исправления и дополнения к финальной русской версии, но я её править больше не планирую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 18:15 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopПри переводе были некоторые исправления и дополнения к финальной русской версии, но я её править больше не планирую. Ну вот как всегда - "вычищенное" на аглицком :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 19:40 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Откуда можно скачать вторую часть книги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 16:45 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
israelshamir, Просил несколько раз модераторов добавить в конец стартового поста, но меня игнорят. The Power of Oracle SQL. All versions Модератор: добавлено в стартовый ПОСТ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 16:53 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, эту ссылку я видел. Но при переходе: "Not published yet"(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 16:58 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
israelshamir, Version 1.1 содержит обе части. Not published yet относится к инглиш версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 17:03 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, протормозил я что - то, извиняюсь. Книга замечательная, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2017, 08:06 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
envПечатное издание книги планируется или я всё пропустил?Ровно через год после начала топика. :) Тынц (публично еще недоступно) Если кого из Москвы интересует - вероятно буду там в апреле, могу за полцены бокал пива передать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 03:52 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopЕсли кого из Москвы интересует +1 к nvl(кого из Москвы интересует,0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 10:23 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Поздравляю! Большое хорошее дело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 10:43 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Ждем тебя в апреле чтобы обмыть)) предупреди за пару недель чтобы собрать побольше народу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 12:03 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, в описании релиза указано 240 страниц, а в файле пдф 182 страницы. В чём причина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 13:05 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
гр кdbms_photoshop, в описании релиза указано 240 страниц, а в файле пдф 182 страницы. В чём причина?Помимо того, что в книге может присутствовать дополнительный материал, средний размер страницы книги меньше А4. Насколько я помню, PDF у фотошопа - это не отсканированные страницы, а оцифрованный материал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 13:56 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
гр к, Я доработал до 200-210 страниц, остальное это результат форматирования издательства. Кардинально переработана и дополнена только глава 9 "Logical execution order of query clauses". Там, скажем так, был ряд misleading statements. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 15:26 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Спасибо за отзывы, критику и комментарии. Без этого форума книги, наверное, не было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 15:29 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopСпасибо за отзывы, критику и комментарии. Без этого форума книги, наверное, не было бы.Была бы! Но, возможно, несколько другая... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 15:31 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
https://www.apress.com/gb/book/9781484233719 Authors: Reprint sev, AlexФамилия автора интересно выглядит в английском написании... :-) https://ru.wikipedia.org/wiki/Репринт Репри́нт (англ. to reprint — перепечатывать, переиздавать) — издание, выпуск которого осуществляется путём репродуцирования (сканирования) страниц книги, рукописи и прочих выбранных для воспроизведения источников с сохранением текста, но без воспроизведения особенностей материалов (бумаги, переплёта) и печати (дефектов, исправлений, опечаток) предыдущего издания. Последним свойством отличается от факсимиле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 17:01 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Валерий Юринский, Давайте будем фокусироваться на контенте, а не личностях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 17:14 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВалерий Юринский, Давайте будем фокусироваться на контенте, а не личностях.Это не "фокусировка", а лишь забавное наблюдение... :-) P.S. Вместо "контент" я бы предпочёл использовать "содержание" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 19:23 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Валерий ЮринскийP.S. Вместо "контент" я бы предпочёл использовать "содержание"Вот я как раз имел в виду "содержимое", а не "содержание". Еще можно было сказать информационное наполнение , но громоздко и нелепо. Я, конечно, положительно отношусь к мессаджу посылу из статьи Жобоффер из дефекат-рум , и тоже за чистоту языка, но определенные тенденции имеются и время определит что переводить не стоит, а лучше позаимствовать. Например, вместо попыток перевести immutable, persistent, multitenant и проч. я лучше использую слово оригинала общаясь в интернетах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 20:09 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopя лучше использую слово оригинала общаясь в интернетах. Раскладку переключать лениво, а транскрипция... неее, лучше уж локализованный термин :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 21:29 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Спасибо. Возьму в изучение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 21:33 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
слово оригиналалокализованный терминЕсть немало старых терминов, которым до сих пор нет устоявшегося перевода из-за неоднозначности вариантов. Взять ЯСЗ, который пытались писать по началу в книгах. Много ли молодняка поймет, что это? Да и потом, в русском языке уже 70% терминов заимствованы. Как по-исконнорусски таблица или индекс?? Или. Решил ты переводить column не как давно заимствованное колонка, а более русское поле. И тут бац - hybrid columnar compression - гибридное пополевое сжатие. Очень по-русский звучит "пополевое", а "полевое" не полностью отражает смысл термина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 21:55 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
partiition-section, drop-deleteЯСЗЭто Ярославский Судостроительный Завод. А вот СЯЗ уже обсуждали . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 23:19 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
Валерий Юринский https://www.apress.com/gb/book/9781484233719 Authors: Reprint sev, AlexФамилия автора интересно выглядит в английском написании... :-) https://ru.wikipedia.org/wiki/Репринт Репри́нт (англ. to reprint — перепечатывать, переиздавать) — издание, выпуск которого осуществляется путём репродуцирования (сканирования) страниц книги, рукописи и прочих выбранных для воспроизведения источников с сохранением текста, но без воспроизведения особенностей материалов (бумаги, переплёта) и печати (дефектов, исправлений, опечаток) предыдущего издания. Последним свойством отличается от факсимиле. Вот про фамилии в английском написании я бы на вашем месте вообще не заикался... Учитывая что правильная транслитерация буквы "Ю" - это "IU" Пользуясь случаем, автору топика - спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 10:17 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВалерий ЮринскийP.S. Вместо "контент" я бы предпочёл использовать "содержание"Вот я как раз имел в виду "содержимое", а не "содержание". Это синонимы, но в данном случае "содержание" по смыслу ближе... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 11:42 |
|
||
|
The Power of Oracle SQL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, спасибо за труд! на 9 странице опечатка, первое предложение последнего абзаца, вероятно, пропущено слово "когда" The Power of Oracle SQLКонцепция pre/post join предикатов применима только тогда имеется внешнее соединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 13:01 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1884482]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
118ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 405ms |

| 0 / 0 |
