Как стать автором
Обновить

Комментарии 18

Огонь! П.1 я не так давно писал — корячился.
Достаточно спорная статья во многих аспектах.

«Если программист забыл залить в гит» — а не надо забывать, да и на проде программисты не должны иметь доступ к компиляции объектов вообще. Вносить изменения нужно через строго налаженый процесс ci/cd. Коммит в гит, прогон тестов, дальше если все ок деплой.

PL/SQL достаточно убогий и примитивный, поэтому на нем можно почувствовать только боль и унижение, а не «каждый байт». А писать какую-то сложную хранимую логику на нем хотя и можно, но лучше не нужно. За 10 лет работы мы с ним наелись всякого.

View с параметрами через pipelined functions — да такого изврата даже наши горе программисты в конторе не изобретают. Вероятно автор не сталкивался с понятием pushed predicate при запросе к вью. То что тут показано может быть заменено без табличной функции совсем обычной view. Табличные функции медленные, прожорливые до памяти, и могут порождать ошибки типа ORA-600.

Пример «как с помощью запроса быстро нарисовать такую картинку в формате SVG» — просто ужасен. Километровая портянка абсолютно нечитаемой мешанины юнионов и литералов щедро приправленая рекурсией и select from dual. Отличный пример как можно забивать гвозди микроскопом. Зачем превращать СУБД в контент-сервер с генерацией картинок(то что svg по сути текст большой разницы не играет)?

Также Вы изобрели колесо свое распараллеливание на коленке, браво. Попробуйте посмотреть на встроенный Dbms_parallell_execute.

Я уже молчу про «нормализацию» текста регулярками с помощью рекурсивного запроса, лол.

Поиск по продуктовым базам по коду через дблинки…
— Дорогой где ты был?
— Стрелял по лягушкам в Германии лазером из космоса со спутника!
— Странно, но травой не пахнет
— Дура, я под ЛСД


Поиск по каталогу dba_source может быть заменен просто на поиск по репозиторию(внимательно смотрим первый пункт про git и хранение исходников в нем). Если хочется делать быстрый поиск по сорцам — льем репозиторий в какой-нибудь Elasticsearch и вот вам и поиск всего чего только хотите в вашем коде.

На вашем месте я бы озаглавил статью: 10 приемов как не нужно работать в Оракл.
А мне понравилась идея с svg. Более того, я в pl/sql делаю файлы xlsx. Может быть, теперь смогу туда графики на листы вставлять. Надо попробовать.
Ну то что вы делаете там эксельки — это совсем не значит что это хорошо.
Может вы и pdf тоже им делаете?
Делаю многое из того, что умеют пакеты alexandria, плюс свои доработки.
Благодарен вам за отзыв. Если этот пост – пример того, как не нужно работать с Oracle, то у вас и сообщества читателей Хабр есть возможность написать, как же нужно с ним работать. В том числе, можно пройтись по каждому из описанных приёмов. Согласен, что есть масса других способов реализации написанного выше, в том числе с использованием готовых поисковых машин. Не всегда есть время разбираться со специализированными решениями. Не всегда есть возможность пользоваться более специализированными решениями из-за требований режима, в том числе, не всегда исходники можно выложить. Согласен, что PL/SQL уступает многим другим средствам разработки. Однако, приведённые решения просты для понимания, могут быть реализованы “на коленке” и не требуют сложных доступов. Предложенные решения хороши тем, что их можно использовать “здесь и сейчас”. Для каждого решения существует лучший инструмент с учётом сложившейся среды разработки, версий продукта, имеющихся доступов и практики вывода кода на промышленные серверы. В зависимости от этого наилучший инструмент может варьироваться. Вижу, что у вас другие средства и технологии. Пожалуйста, делитесь ими. Хабр – отличная площадка для этого.
Да ради бога, пишите внутри компании свои костыли как там принято делать. Просто не нужно других агитировать делать так же. Кому-то может нравится упарываться героином, но это не значит что другие должны тоже за ним повторять.

Да и не родился еще программист, который бы не считал свой код самым-самым. А когда говорят, что код попахивает и коричневого цвета, они обычно обижаются.

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

А Хабр, он уже давно превратился из образовательного ресурса в площадку для кармадрочеров, которые просто хотят набрать кассы потешить свое ЧСВ.
Веб поисковик — самописный?
Я не понял на каком движке он.
Получив запрос на поиск, я бы в первую очередь, выдал бы ч-то то из заранее проиндексированного.
А в фоне продолжил бы искать по обьектам, если пользователя не удовлетворят результаты из индекса, и он не прервет поиск.
На plsql конечно. А движка нет — это просто селекты с like из dba_source :D
Можно какой-нибудь Lucene прикрутить для индексации, работы со словоформами, и нечеткого поиска. Не всегда нужны результаты «онлайн», во многих случаях устроят и проиндексированные вчера, или неделю назад. А такой результат можно отдать мгновенно из индекса.
Каэшно так в разы лучше. Но мы изобретем свой собственный велосипед с квадратными колесами. Ибо так можно делать вид что программисты делом заняты и что-то пишут для фирмы.
Да, вот как раз поэтому, имея полное понимание того, что и как нужно делать, и имея все необходимые навыки — я этого не сделал на работе.
Пока не появится официально в системе задач, проект на эту тему, назначенный на меня, делать это не буду.
А в свое личное время, для себя писать — можно, но некогда :)
Если и найдется возможность сделать, то работу это нести как-то не очень правильно.

Про dynamic sampling, я думаю, стоит сказать, что он работает только на фазе hard parse. Как и «подсматривание параметров», оно же bind peeking. И это довольно сильно ограничивает его полезность. Потому что если запрос уже разобран, и есть план выполнения в кэше, никакого динамического сэмплирования не случится.

Это именно так и работает. Набираешь специалистов по Delphi и получаешь универсальную систему для всего на Delphi. Набираешь специалистов по PL/SQL и получаешь прекрасный веб-сервер с поисковым движком на Oralce.
Набрали бы питонистов, они бы то же самое на питоне напитонили.


Но вот один пункт, конечно, уникален для сбера.


если программист забыл сдать изменения в Git,

И что, как эти изменения в боевую базу попали? Вы все еще храните в этом учреждении свои деньги? Будьте осторожны.

Конечно же, программисты не забывают сдать никакие изменения в Git и вывод кода на продуктив осуществляется только после тестирования на стендах СТ (системного тестирования), ИФТ (интеграционного функционального тестирование) и ПСИ (приёмо-сдаточных испытаний). С боевыми БД все в порядке, но кроме них есть отладочные, с которыми работают большие ученые, отличающиеся рассеянностью. Так что система логирования не бесполезна. А хранить деньги в Сбере можно и нужно.

Хочу уточнить детали по использованию таблиц hist1, hist2, hist3 и т. п.


  • В какой таймзоне указаны значения в поле start_dt?
  • Что будет, если пользователь 2 раза изменит значение 1 атрибута в течение 1 дня?
Данный пример условный и выстраивает историю с точностью до целых дней.
Считаем, что hist1, hist2, hist3 подготовлены таким образом, что за один день по одному атрибуту может быть только одно изменение.
Если поменять ограничение и предположить, что, например, за одну секунду по одному атрибуту может быть только одно изменение, то в запросе надо написать «lead(start_dt — 1/24/60/60)».
по поводу параметрической view, можно попробовать использовать таблицу с параметрами, передавая в основной запрос ID текущих значений переменных.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий