Oracle Developer👨🏻‍💻
3.17K subscribers
583 photos
63 videos
2 files
469 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Задача: написать анонимный PL/SQL-блок, который выведет числа от 1 до 9 используя for loop. В выводе не должно быть четных чисел.

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

1️⃣ Проверка счетчика итерации на четное значение, используя остаток от деления (mod). Если значение четное - пропускаем эту итерацию (continue). Остаток от деления, довольно часто, используется в задачах типа, “коммитить каждые N записей”.

begin
for i in 1 .. 10 loop
if mod(i, 2) = 0 then
continue;
end if;
dbms_output.put_line(i);
end loop;
end;
/

2️⃣ Использование расширенного Loop в Oracle 21c.
Юзаем указание шага через by.

begin
for i in 1..10 by 2 loop
dbms_output.put_line(i);
end loop;
end;
/

Для экспериментов вполне пригодится СУБД Oracle21с XE, установленная в Docker.

3️⃣ И другие варианты, на которые хватит вашей фантазии 🧠
Кое-какие накидали ребята в чатике. Гранд мерси 😉

#решениезадачи #loop
Задача: необходимо задать правило на сложность пароля определенным пользователям в БД.

Правила:
1. Не должен быть равным имени пользователя.
2. Должен содержать символ “#”.

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

Примеры:
alter user ivanov identified by ivanov; – ошибка
alter user ivanov identified by ivanov1; – ошибка
alter user ivanov identified by ivanov#1;-- ок

Разбор решения, как всегда, в четверг 🎓

#задача
Задача: задать кастомное правило валидации пароля. Подробней см. пост вторника.

Решение:
В БД Oracle есть такая сущность как профиль (Profile) с помощью неё можно ограничить потребляемые пользователем ресурсы, задать различные параметры паролю, в том числе можно указать функцию валидации пароля.

Итого: создаем функцию валидации, даем грант на выполнение всем, создаем профиль, создаем пользователя с этим профилем.

продолжение ниже ⬇️
create or replace function sys.student_pwd_verify_function(username     varchar2
,password varchar2
,old_password varchar2)
return boolean is
begin
return password like '%#%' and lower(password) != lower(username);
end;
/
grant execute on sys.student_pwd_verify_function to public;

create profile student_profile
limit password_verify_function
student_pwd_verify_function container = current;

create user ivanov
identified by ivanov#
default tablespace users
temporary tablespace temp
profile student_profile;

Попытка сменить пароль на не подходящий под валидацию будет заканчиваться ошибкой:
ORA-28003: password verification for the specified password failed

"container = current" - для контейнерных БД.
⚠️ Все манипуляции выполняются под привилегированным пользователем.

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

Перетереть в чатике

#решениезадачи #profile
Яндекс + Oracle

Сидишь никого не трогаешь, резюме везде закрыто, работу не ищешь, и все равно, нет нет, да упадет предложение от “охотников за головами”.
В декабре опять произошла подобная история. На этот раз HR-фрилансер с позицией Oracle DBD в Яндекс. Ух, сам Яндекс(!)

Был удивлен. Зачем Яндексу Oracle-разработчики? Но, тем не менее, есть позиции, где требуется данная квалификация 🎓
Нет смысла нудить про импортозамещение, про “Oracle дорого”, про скрепы, YandexDB и т.п. Надо значит надо.

Один мой бывший коллега, на различных online-митапах, часто говорит о том, что он “прошел собеседование в Яндекс, но выбрал другую компанию”. Т.е. пройти собеседу туда считается достижением (без сарказма).

Это не одно собеседование, а целый ряд сессий. Общение по родном стеку, алгоритмическая секция, общение с руководителем и т.п. Подобрать ключик к интервьюверам сложно, но возможно.

Если вам интересно, могу рассказать о том, как это было, какие задачки спрашивали и другие подробности. И самое главное, чем в итоге все закончилось 😉

Ребятам с Яндекса (они теперь в канале). Вы крутые, спасибо за уделенное время. Я обещаю не публиковать конкретные формулировки ваших заданий.

Всем хороших выходных!

#яндекс
Oracle & Яндекс. Часть 2
Судя по всему, тема с Яндексом интересна. Продолжаю.
Оговорюсь, это мой личный опыт. У вас он может быть другим.

На декабрь месяц, было два направления для Oracle DBD:
1️⃣ Разработчик Oracle + OeBS
2️⃣ Разработчик Oracle в Яндекс.Банк
Не уверен, что специалисты до сих пор нужны, но вакансии активны.

Этапы собеседования:
1️⃣ общение с тим-лидом команды;
2️⃣ техническое собеседование;
3️⃣ общение с CEO направления;
4️⃣ финалочка с презентацией оффера.

Алгоритмического этапа для DBD решили не делать. К вопросу, как часто спрашивают про ООП и SOLID на собеседованиях на DBD - “никогда”.

Смею предположить, что вам интересен этап “техническое собеседование”.
Мне посчастливилось пройти техническое собеседование и на первую вакансию, и на вторую. Поэтому есть некоторое представление.
🔹На техническое собеседование дают 1 час.
🔹3-4 задачи.
🔹Все это происходит по Zoom в реальном времени. Вы рассуждаете, пишите запросы/отвечаете, интервьюер внимательно слушает ход ваших мыслей.
🔹Если у вас есть уточняющий вопрос по заданию - могут подсказать.
🔹Царит вполне дружелюбная обстановка, никто вас не пытается “загнобить”.
Ребятам с Яндекса - респект. Было приятно пообщаться 👍

Основные группы вопросов: SQL-функции, задачи на соединения, аналитические функции. На аналитику особенный упор. Еще был один общий вопрос на оптимизацию. Примерно такой.
Некоторые из задач мы уже разбирали в канале. Некоторые я еще опубликую, в измененном виде.

Пока всё. Продолжение в следующих постах 😉

#яндекс
Непересекающиеся отрезки

Задача: при вставке в таблицу необходимо проверять, что новая строка не пересекается по датам с уже имеющимися в разрезе клиента.

Необходимо написать запрос проверяющий пересечения.

create table client_tariff(
client_id number(38) not null,
date_from date not null,
date_till date not null
--...
);

insert into client_tariff values
(1, date'2022-01-01', date'2022-01-10');
insert into client_tariff values
(1, date'2022-02-01', date'2022-02-13');

Примеры:
c '2022-01-10' по '2022-01-12'-- ок
с '2022-01-10' по '2022-02-01'-- ok
c '2021-12-01' по '2022-01-02' - ошибка
с '2022-01-14' по '2022-02-03'-- ошибка

Визуально можно посмотреть на рисунке:
▫️1-й отрезок пересекается своим окончанием с уже имеющимся;
▫️2-й отрезок пересекается своим началом с окончанием имеющегося;
и так далее. варианты могут быть различные.
▫️“все ок” - отрезки, которые не пересекаются с имеющимися.

Решение в четверг 🎓

#задача #яндекс
Непересекающиеся отрезки. Решение

Задача: постановка в посте вторника.

Решение:
Суть: необходимо проверять границы отрезков. Можно решить задачу ”в лоб”. Расписать все кейсы, когда новый отрезок заходит одной границей на начало отрезка в таблице, когда другой и т.д. Получится огромная “портянка” из условий.

Можно пойти от обратного (см. рисунок)
Достаточно проверить, что b2 > a and a2 < b;

Итоговый запрос:
select count(1)
from (select 1 client_id,
date'2022-01-10' d_from,
date'2022-01-12' d_till
from dual) e
join client_tariff t
on t.client_id = e.client_id
and e.d_till > t.date_from
and e.d_from < t.date_till;

В моей практике, подобная задача периодически возникала в рабочих кейсах.
И один раз на собеседовании в Яндексе. Правда, там задача с отрезками еще более замороченная. Но если вы поймете принцип этого решения, значит сможете сообразить как решаются подобные задачи.

Обсудить в чатике
#решениезадачи #яндекс #отрезки
Всем хорошей пятницы и выходных 🎊

#юмор
Задача: дана таблица tab1. В ней N-строк. Необходимо написать запрос, который для каждых 3 строк будет считать сумму поля “n”. Сортировка по “n”.

Для текущего примера (см скриншот). В таблице хранится 7 строк: 1, 2, 3, 4, 5, 6, 7.

Результатом запроса будет три строки с суммами (см скрин):
1) 1 + 2 + 3 = 6
2) 4 + 5 + 6 = 15
3) 7 = 7

Для повторения:
create table tab1(
n number(10)
);
insert into tab1
select level
from dual connect by level <= 7;
commit;

Обсуждение решения в четверг 🎓

#задача #яндекс
Задача: подробная постановка в посте вторника.

Решение:
Задачка на аналитические функции (АФ).

Прежде чем получить сумму для каждой сгруппированной тройки строк, нужно как-то им дать порядковые номера групп. Как только получим номер группы для каждой исходной строки можно суммировать "n".
Необходимо помнить про сортировку по “n” при расстановке номеров групп.
▫️АФ row_number - для каждой строки отдаст порядковый номер с учетом сортировки.
▫️Функция ceil - вернет наименьшее целое число, которое не меньше числа, указанного в качестве аргумента (см скрин).

Итоговый запрос:
select group_, sum(n) group_summa
from (select n
,ceil(row_number() over(order by n) / 3) group_
from tab1)
group by group_
order by group_;

На скрине развернул внутренний запрос для наглядности.

Подобная задачка была на собеседовании в Яндексе, только более замороченная с дополнительными АФ.

Перетереть в чатике

#решениезадачи #яндекс #аналитическиефункции
Друзья, всем привет!

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

1️⃣ Выражение своего мнения, которое отличается от официальной позиции, может повлечь за собой штраф и/или срок до 15 лет лишения свободы. Нельзя называть вещи своими именами… Уже есть случаи "доносов". Привет темному советскому прошлому.

2️⃣ 03 марта 2022 года Oracle ушел с рынка РФ. Что теперь делать?
Совершенно точно, невозможно прямо завтра взять и перейти на другую СУБД. Написано очень много legacy-кода на PL/SQL. Даже, если компании решатся переходить на другой стек, это займет массу времени.
С учетом слухов о “цифровом пиратстве”, возможно, перехода не будет или он будет крайне медленным.
Работа для Oracle DBD - будет 100%.

3️⃣ Велика вероятность блокировки Youtube. Да, всё это можно обойти вполне простым способом. Кто знает, какой завтра закон будет выпущен “бешеным принтером”. VPN могут запретить со всеми вытекающими наказаниями. Если буду пилить видосы, придется прямиком заливать сюда.

4️⃣ С учетом изменений, вероятно, придется переформатировать канал во что-то другое.
Например, рассказывать больше про другие СУБД, про backend-разработку в целом.
Есть кое-какой опыт работы с PostgreSQL, возможно вам зайдут статьи по сравнению и миграции.

5️⃣ Я не могу сейчас создавать контент.
Просто голова забита совсем другим. Я уже неоднократно заявлял, если есть что рассказать, готов опубликовать ваш пост с сохранением авторства.
Периодически буду скидывать интересные видосы, статьи или вакансии. Я называю это внешним контентом.
Можете присылать ссылки на контент, который вам зашел.

Оставайтесь на канале, спасибо за понимание.

Всем мирного неба над головой 🕊
К. Миру-мир
МАЛЬЧИШНИК
кто родился в 80х и был подростком в 90х?
помните был такой "Мальчишник"
😉

Название: Миру-мир!
Исполнитель: Мальчишник
Правообладатель: М2 ООО "М2"
Источник: https://ru.hitmotop.com/song/72480740
Что впереди. Часть 1

Друзья, всем привет!
Потихонечку отходим от шока и продолжаем.

1️⃣ Oracle больше не оказывает поддержку и не продает новые продукты компаниям в РФ.
2️⃣ 30.03 президент РФ подписал указ “о мерах по обеспечению технологической независимости”. Согласно приказу необходимо до 1 января 2025 года отказаться от иностранного ПО для органов гос власти.
Кстати, это будет интересный вызов для ФНС, казначейств и т.п., которые юзают Oracle и в хвост и в гриву уже очень давно.

Возникает вопрос: “что ждет нас впереди?” 😱

Чуть истории. Oracle пустил в РФ свои корни ооочень давно. Еще в начале нулевых, СУБД бесплатно раздавалась гос.органам, никто особо не следил за лицензиями в коммерческих компаниях и т.п.
С тех пор, появилось столько Legacy-решений, использующих специфику именно Oracle…
Теперь представьте, что вам нужно взять и заменить за какой-то разумный срок десятки/сотни тысяч строк кода на PL/SQL, написанные за 15-20 лет? Как-то перелить/преобразовать данные? Найти достойную альтернативную РСУБД, входящую в реестр отечественного ПО и выдерживающую нагрузку?
Легко? Не думаю.

Кстати, как ни странно, не всегда указы президента исполняются 😉

В среду продолжим рассуждать о судьбинушке…

Велком в чатик перетереть ⬇️
Что впереди. Часть 2

На мой субъективный взгляд, если РФ и дальше будет идти по пути изоляции, будет несколько течений в российском сегменте потребления Oracle.

1️⃣ Постепенная медленная миграция на альтернативные решения. Например, PostgreSQL + Java.
2️⃣ Нелицензионное использование СУБД Oracle в тех компаниях, в которых переход сложен/трудоемок/почти невозможен. Снизится стоимость владения, не будет поддержки от производителя.
3️⃣ В новых проектах - не будут использовать Oracle. В legacy-проектах - см первые два пункта.

А что делать разработчикам?
1️⃣ Будет очень много работы по тому, чтобы съехать с Oracle куда-то.
Поэтому не одним Ораклом едины. Спецы знающие не только Oracle будут востребованы. Кстати, возможно компании будут переучивать специалистов, расширять компетенции. T-shape - специалисты. В Qiwi, например, этот тренд уже года три. Я сам постепенно осваиваю Java/Kotlin.
2️⃣ Можно остаться так же Oracle DBD. Несомненно, компаниям из п.2., нужны будут разработчики. Насколько это будет перспективно… больше зависит от политики.
3️⃣ Работа на иностранную компанию/релокейт. В этом направлении, так же есть возможности.

Итого: работа будет 100%.

Оговорюсь, это лично мое мнение. Жизнь иногда подкидывает такие сюрпризы, которые невозможно прогнозировать заранее.

Велком в чатик перетереть ⬇️
Что впереди. Часть 3.

Одно можно сказать точно. Жизнь уже не будет прежней.

Каналу необходимо соответствовать времени. Поэтому, помимо материалов о СУБД Oracle, буду иногда публиковать посты про другие решения. Будем расширять кругозор 😉

Сами понимаете, что ближайшей альтернативой СУБД Oracle является СУБД PostgreSQL. Периодически буду сравнивать эти две СУБД и подсвечивать особенности.

Посмотрим, как вам зайдет такой формат.

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

Хочу пожелать всем хороших выходных и мирного неба над головой 🕊

Чатик
Друзья, всем привет!

Заканчиваю телегу про Яндекс.
Остановились мы на истории о собеседовании в Яндекс.
Посмотрел те две вакансии. Одна уже в архиве. Актуальна ли вторая? хороший вопрос.
Такое ощущение, что это было в прошлой жизни…

Не буду больше интриговать. Я тогда успешно прошел все собеседования и получил оффер. У них были довольно шикарные условия по входному бонусу, премиям и размеру з/п. Не уверен, что предлагают всем и… я отклонил оффер и остался в Qiwi 💛

Кстати, проскальзывала инфа, что у Яндекса мораторий на набор. Может фейк…
Если знаете, напишите плиз в чатике.

В сухом остатке - задачи с Яндекс-собеса. Завтра опубликую очередную. Есть набор или нет набора, а мозг размять полезно 🎓

#яндекс
Задача про курсы валют

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

Дана таблица FxRates с курсами валют:
name ddate rate
USDRUB 2001-01-03 63.54
EURRUB 2002-01-02 74.90
USDRUB 2002-03-10 65.01
USDRUB 2006-01-01 77.43
EURRUB 2005-02-03 65.10
USDRUB 2006-03-04 78.99

Пример ответа
name ddate rate
USDRUB 2006-03-04 78.99
EURRUB 2005-02-03 65.10

На этот раз формулировка исходная без изменений.

Как всегда, разбор в четверг 🎓

#задача