«Если программист забыл залить в гит» — а не надо забывать, да и на проде программисты не должны иметь доступ к компиляции объектов вообще. Вносить изменения нужно через строго налаженый процесс 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 приемов как не нужно работать в Оракл.
Ну ничего нового тут нет написано, чего бы я не знал.
Если вариантов значений у столбцов(которые передаются в функцию) таблицы много, то «кеш» будет только на каждый уникальный набор входных аргументов.
И причем тоже не всегда это будет работать(там даже написано об этом — есть лимит применения «кеша» по числу строк в датасете)
И что бы это вам дало?
Функция вызывается с передачей в нее значений из столбцов таблицы — соответственно вызов функции на каждую выбираемую строку пойдет(как и написано в абзаце). Отсюда мораль: дети, не используйте функции ни в where clause, ни в селект списке, это может быть больно.
А автору — респект и уважуха за такой отличный и подробный разбор подводных камней.
Верно, локальный бизнес в России, но в разных городах и разных часовых поясах.
И меняли таймзоны на своих серверах и не раз, скажем спасибо нашему правительству
Для отложенных операций в будущем мы у себя используем current_date и нам вполне этого хватает, хотя конечно соглашусь что в других случаях этого могло быть недостаточно
Пфф, как не красиво. Зачем делать для прода кастомную функцию, которая заменяет собой системные функции (и при этом на проде время не нужно менять)?
Если переписывать вообще все что есть на тестовой среде под такие требования — код будет от прода отличаться. К тому же никто не сможет запретить написать код без использования кастом функции для времени. Спасибо, но нет.
И тут тоже спасибо за подсказку. Этого никто в нашей команде не находил во время отбора гипотез. Но оно будет работать только если экземпляры базы данных разные и запущены как разные контейнеры, а для cdb/pdb опять бы пришлось все равно делать что-то свое.
Cпасибо за интересную идею. Ее как оказалось мы не смотрели при отборе вариантов. Но тут есть момент: время то полностью заморозится в таком случае. А нам нужно чтобы оно продолжало тикать и после модификации.
Может вы и pdf тоже им делаете?
«Если программист забыл залить в гит» — а не надо забывать, да и на проде программисты не должны иметь доступ к компиляции объектов вообще. Вносить изменения нужно через строго налаженый процесс 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 приемов как не нужно работать в Оракл.
Если вариантов значений у столбцов(которые передаются в функцию) таблицы много, то «кеш» будет только на каждый уникальный набор входных аргументов.
И причем тоже не всегда это будет работать(там даже написано об этом — есть лимит применения «кеша» по числу строк в датасете)
Функция вызывается с передачей в нее значений из столбцов таблицы — соответственно вызов функции на каждую выбираемую строку пойдет(как и написано в абзаце). Отсюда мораль: дети, не используйте функции ни в where clause, ни в селект списке, это может быть больно.
А автору — респект и уважуха за такой отличный и подробный разбор подводных камней.
И меняли таймзоны на своих серверах и не раз, скажем спасибо нашему правительству
Для отложенных операций в будущем мы у себя используем current_date и нам вполне этого хватает, хотя конечно соглашусь что в других случаях этого могло быть недостаточно
Если переписывать вообще все что есть на тестовой среде под такие требования — код будет от прода отличаться. К тому же никто не сможет запретить написать код без использования кастом функции для времени. Спасибо, но нет.
Например, докер под виндами унылое подобие.
султанджавист, тогда бы мне это помогло. Спасибо за подсказку.WSL есть только в 10ке если мне память не изменяет. А пока её нет — приходится жить с чем есть. А вообще по идее да, должно решать.