Комментарии 18
«Если программист забыл залить в гит» — а не надо забывать, да и на проде программисты не должны иметь доступ к компиляции объектов вообще. Вносить изменения нужно через строго налаженый процесс ci/cd. Коммит в гит, прогон тестов, дальше если все ок деплой.
PL/SQL достаточно убогий и примитивный, поэтому на нем можно почувствовать только боль и унижение, а не «каждый байт». А писать какую-то сложную хранимую логику на нем хотя и можно, но лучше не нужно. За 10 лет работы мы с ним наелись всякого.
View с параметрами через pipelined functions — да такого изврата даже наши горе программисты в конторе не изобретают. Вероятно автор не сталкивался с понятием pushed predicate при запросе к вью. То что тут показано может быть заменено без табличной функции совсем обычной view. Табличные функции медленные, прожорливые до памяти, и могут порождать ошибки типа ORA-600.
Пример «как с помощью запроса быстро нарисовать такую картинку в формате SVG» — просто ужасен. Километровая портянка абсолютно нечитаемой мешанины юнионов и литералов щедро приправленая рекурсией и select from dual. Отличный пример как можно забивать гвозди микроскопом. Зачем превращать СУБД в контент-сервер с генерацией картинок(то что svg по сути текст большой разницы не играет)?
Также Вы изобрели
Я уже молчу про «нормализацию» текста регулярками с помощью рекурсивного запроса, лол.
Поиск по продуктовым базам по коду через дблинки…
— Дорогой где ты был?
— Стрелял по лягушкам в Германии лазером из космоса со спутника!
— Странно, но травой не пахнет
— Дура, я под ЛСД
Поиск по каталогу dba_source может быть заменен просто на поиск по репозиторию(внимательно смотрим первый пункт про git и хранение исходников в нем). Если хочется делать быстрый поиск по сорцам — льем репозиторий в какой-нибудь Elasticsearch и вот вам и поиск всего чего только хотите в вашем коде.
На вашем месте я бы озаглавил статью: 10 приемов как не нужно работать в Оракл.
Да и не родился еще программист, который бы не считал свой код самым-самым. А когда говорят, что код попахивает и коричневого цвета, они обычно обижаются.
Странные у вас требования режима: к продовой базе из других мест можно по дблинку ходить, а сделать приватный репозиторий в внутри компании для хранения кодовой базы нельзя. Сейчас где-то грустит один безопасник. Ору в голосину.
А Хабр, он уже давно превратился из образовательного ресурса в площадку для кармадрочеров, которые просто хотят
Я не понял на каком движке он.
Получив запрос на поиск, я бы в первую очередь, выдал бы ч-то то из заранее проиндексированного.
А в фоне продолжил бы искать по обьектам, если пользователя не удовлетворят результаты из индекса, и он не прервет поиск.
Пока не появится официально в системе задач, проект на эту тему, назначенный на меня, делать это не буду.
А в свое личное время, для себя писать — можно, но некогда :)
Если и найдется возможность сделать, то работу это нести как-то не очень правильно.
Про dynamic sampling, я думаю, стоит сказать, что он работает только на фазе hard parse. Как и «подсматривание параметров», оно же bind peeking. И это довольно сильно ограничивает его полезность. Потому что если запрос уже разобран, и есть план выполнения в кэше, никакого динамического сэмплирования не случится.
Это именно так и работает. Набираешь специалистов по Delphi и получаешь универсальную систему для всего на Delphi. Набираешь специалистов по PL/SQL и получаешь прекрасный веб-сервер с поисковым движком на Oralce.
Набрали бы питонистов, они бы то же самое на питоне напитонили.
Но вот один пункт, конечно, уникален для сбера.
если программист забыл сдать изменения в Git,
И что, как эти изменения в боевую базу попали? Вы все еще храните в этом учреждении свои деньги? Будьте осторожны.

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