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

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

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
SQL марафон. Задача 4.

Постановка
Нужно найти отделы с общей зарплатой сотрудников более 50000.
Вывести - ID отдела (department_id).

Сотрудники - таблица employees.

Решения
1️⃣
select department_id
from employees
group by department_id
having sum(salary) > 50000;


2️⃣
select d.department_id
from departments d
where (select sum(salary)
from employees e
where e.department_id = d.department_id) > 50000;


3️⃣
with dept_salaries as
(select department_id
,sum(salary) as total_salary
from employees
group by department_id)
select department_id
from dept_salaries
where total_salary > 50000;


Опубликуйте свое решение в чатике с тегом #решение4 💬

#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
1👍1
SQL марафон. Задача 5.

Постановка
Нужно найти всех сотрудников, у которых зарплата выше средней зарплаты в таблице employees.
Вывести - все столбцы из таблицы employees.

Сотрудники - таблица employees.

Решения
1️⃣
select e.*
from employees e
where e.salary > (select sum(salary) / count(*) from employees);

2️⃣
with avg_sal as
(select avg(salary) as avg_salary from employees)
select e.*
from avg_sal a
join employees e on e.salary > a.avg_salary;


Опубликуйте свое решение в чатике с тегом #решение5 💬

#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
Вот и закончился наш SQL-марафон 👯‍♀️

Победителя оглашу в пятницу. Так что у вас есть время догнать и перегнать 🏆
Напомню, засчитываются оригинальные решения:
🔸 не те, что скрываются под спойлером;
🔸 не те, которые опубликовали ДО вас.
Добавляйте в ответ тег #решениеN.

Приз - 5000 рублей или эквивалент в крипте (USDT) 😁

Все таки, основная цель марафона не заработать денег, а порешать задачки, которые могут встретиться на собеседованиях на Junior, Middle- позиции🎓

Если формат зайдет, будем периодически проводить такое 👍

По моим ощущениям, 5 запросиков в 1 день многовато.
Что думаете?
Обсудить в чатике 💬

#марафон
Канал Oracle Developer | Чатик 💬
👍13
Друзья, всем привет )

Сегодня пятница, а значит пора выдать награду за участие в марафоне 🏆

Приз - 5000 рублей или эквивалент в крипте (USDT) 😁

Посидел, проанализировал решения... Есть прям очень оригинальные, есть модификации +- того, что уже и так опубликовали. Поэтому, чтоб никого не обидеть, решил наградить первых 5 человек, кто набрал больше всего ответов 💪🏻

Список ребят: Александр, Городецкий Олег, Konstantin Danilov, Dmitry Bykov, Abdulmutalib

Каждому по 1К руб или эквиваленту в USDT. На пятничный пивас или кефир, кому что нравится. Напишите мне плиз.
Всем остальным спасибо за участие, был интересно посмотреть на полет фантазии🔥👍

Все таки, основная цель марафона не заработать денег, а порешать задачки, которые могут встретиться на собеседованиях на Junior, Middle- позиции🎓

Следующий раз, задачки будут разделены по дням. Кажется, что тяжеловато в течение рабочего дня решать с интервалом в 1.5 часа 🤷🏻‍♂️

Хорошей пятницы 👯‍♀️

Обсудить в чатике 💬

#марафон
Канал Oracle Developer | Чатик 💬
🔥14👍3
Задача с PL/SQL-коллекциями

Коллеги, всем привет!
Давно у нас не было PL/SQL. В запасниках откопал одну из задачек с реального собеса (DataArt).

Вариант 1 - мой доработанный, вариант 2 - с подковыркой, как был на собесе.

-- Вариант 1
declare
type t_arr is table of varchar2(128) index by pls_integer;
a1 t_arr;
a2 t_arr;
begin
a1(0) := 'zero';
a2 := a1;
a1(0) := 'empty';

dbms_output.put_line(a1(0) || ' | ' || a2(0));
end;
/

-- Вариант 2
declare
type t_arr is table of varchar2(128) index by pls_integer;
type t_arr2 is table of varchar2(128) index by pls_integer;
a1 t_arr;
a2 t_arr2;
begin
a1(0) := 'zero';
a2 := a1;
a1(0) := 'empty';

dbms_output.put_line(a1(0) || ' | ' || a2(0));
end;
/


Вопрос: что будет выведено в буфер?

⚠️ Рекомендую не жульничать, а попытаться решить в уме.

Разбор задачи в четверг 🎓

Обсудить в чатике 💬

#задача
Oracle Developer
👍3🔥1
Задача с PL/SQL-коллекциями. Решение

Постановка в посте вторника.

Решение и анализ

1️⃣й вариант
🔹 t_arr - это ассоциативный массив, объявлен как локальный тип в анонимном PL/SQL-блоке. Ключ - числа, значение - varchar2(128).
🔹 a1 и a2 - это две переменных = два массива.
🔹 Инициализация асоциативного массива не требуется. Поэтому, когда происходит присвоение значения к a1(0) ошибки не будет. “0” - это ключ для значения ‘zero’.
🔹 a2 := a1; - значения первой коллекции копируются во вторую. Если бы это была Java, то мы бы присвоили ссылку a2 на а1.
🔹 a1(0) := 'empty'; - присваивается новое значение в старой коллекции, при этом значение в a2 не меняется (привет вопросам на собесе по Java).

Ответ: empty | zero

2️⃣й вариант
Я бы сказал, рассчитан на внимательность. Честно говоря, не очень люблю такие задачки. Особенно они популярны на Oracle-сертификации.
🔹t_arr и t_arr2 - два локальных типа ассоциативного массива. Да, по сути они одинаковы, но все же это разные типы.
🔹эта строка a2 := a1; вызовет глубокое недоумение у СУБД. Как объекты с разным типом могут быть присвоены друг другу? никак.

Ответ: Тут вообще, произойдет ошибка. Блок не выполнится. Ничего не будет выведено.

Палец вверх, если понравилось 👍

Обсудить в чатике 💬

#решениезадачи
Oracle Developer
👍51🔥21
Задача. Спроектировать отношение между таблицами.

Дано: таблицы - “клиенты” и “адреса”

create table client(
id number(38) not null primary key,
other fields
);

create table address(
id number(38) not null primary key,
other fields
);


У одного клиента может быть более одного адреса, и у адреса может быть более одного клиента.

Как вы опишите в коде эту взаимосвязь? Что для этого потребуется?
Подумайте над ключами, индексами и т.д.

Результат выполнения: набор DDL-команд.

Разбор задачи в четверг 🎓

Обсудить в чатике 💬

#задача
Oracle Developer
👍31
Решение задачи. Спроектировать отношение между таблицами.

Постановка в посте вторника.

Решение
1️⃣ Поскольку, у нас отношение многие-ко-многим, придется создать таблицу связки/маппинга, в которой будет храниться отношение сущностей к друг другу.

2️⃣ Как минимум три столбца:
id - уникальный ID в таблице
client_id - уникальный ID в таблице “клиенты”
address_id - уникальный ID в таблице “адреса”

Может возникнуть вопрос, зачем нам ID? ведь можно использовать пару столбцов для PK.
Генерация и хранение ID практически ничего не стоят. Как минимум, различного рода репликации, переливки ооочень любят ID, а еще б какую-нибудь временную метку.
С ID однозначно идентифицирующую строку - работать проще. В некоторых компаниях, явно прописывается наличие суррогантного ID в любой таблице.


3️⃣ Связка должна быть уникальна, поэтому будет уникальный ключ на пару столбцов - client_id/address_id.
За кадром, Oracle создаст уникальный индекс, который будет поддерживать уникальность на физическом уровне. При наличии этого индекса, мы легко сможем искать по client_id (лидирующий столбец).

4️⃣ Также необходим еще один индекс по address_id.
Почему? Велком на курс по Оптимизации 🎓

5️⃣ Не забудем про foreign keys на таблицы client и address, которые будут контролировать целостность данных.

Итого
create table client_address
(
id number(38) not null,
client_id number(38) not null,
address_id number(38) not null
);

alter table client_address add constraint client_address_pk primary key (id);

alter table client_address add constraint client_address_cl_ad_uq unique (client_id, address_id);

create index client_address_address_i on client_address (address_id);

alter table client_address add constraint client_address_address_fk foreign key (address_id)
references address (id);
alter table client_address add constraint client_address_client_fk foreign key (client_id)
references client (id);


Задачка на архитектуру - довольно простая и короткая, но очень показательная.
Бывает так, что ставит в тупик крепкого мидла или сеньера (по их версии). Лично мне она попадалась в Сбер-банке.

Я люблю её спрашивать на Mock-собеседованиях. Это такие тренировочные собеседования, симуляции. Можно без страха, попробовать, подсветить свои пробелы и т.д.
Например, перед тем как пробоваться на позицию Java-разработчика, я прошел парочку Mock-собеседований. Это хороший прогрев перед поиском. Если, вдруг, интересно попробовать - пишите в личку.

Да, тут много чего можно еще навертеть. Чем ребята в чатике успешно занимались 😉👍

Обсудить в чате 💬

#решениезадачи #архитектура
Канал Oracle Developer | Чатик 💬
👍13🤯2
Внимание! Конкурс

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

Что-то у нас давно не было денежных конкурсов 💸
Реклама публикуется, а доход не делится — не порядок 😊

Давайте сделаем так:

1️⃣ Во вторник я опубликую задачку с собеседования.
Её мне подкинул один из участников канала.

2️⃣ До четверга 13:00 можно будет публиковать свои решения в чатике.
Шанс и мозг размять, и на пиво/кефир заработать 🍺

3️⃣ В четверг я опубликую голосование, и вы сможете выбрать один из вариантов.
публика решает, чье решение достойно 😎

4️⃣ В пятницу "подведем итоги, наградим непричастных и накажем невиновных" 🎁

Как вам такая идея? 💡

#конкурс
Канал Oracle Developer | Чатик 💬
🎉8
Конкурс на лучшее решение. Rest History

Условия участия
1️⃣ Публикуете свои решения в чатике с тегом #конкурсRestHistory
2️⃣ Повторные решения одним и тем же подходом/способом не засчитываются. Кто первый - того и тапки.
3️⃣ Пользуйтесь разметкой кода в телеграме.
4️⃣ Оценивать будем по количеству реакций на каждом решении.
5️⃣ Если участник отправил несколько решений, то считается сумма реакций.
6️⃣ Решения принимаются до 13:00 20.06 (чт).
7️⃣ Голосовать можно до 9:00 21.06 (пт).
8️⃣ Награждение победителя денежным призом - 21.06 (пт).

Задача
Задача была дана на собеседовании в одном из банков нашему подписчику.
Поэтому все стоны о нечетких формулировках задачи и т.п. направляем в “Спортлото” 😊

Имеется таблица остатков rest_history.
▫️id_dog - id договора
▫️dt - дата изменения остатка
▫️balance - остаток на конце дня dt (0 или положительный)

Условия:
▫️на каждую дату максимум одна запись, если остаток менялся;
▫️ в таблице для каждого договора первой строкой является строка с ненулевым остатком.

Необходимо написать SQL-запрос:
▫️для каждого договора вычислить периоды, когда он имел ненулевой остаток;
▫️период закрывается датой dt-1 строки с нулевым остатком;
▫️eсли ненулевой остаток остается, то период закрывается датой 31.12.2999.

Тестовые данные:
with rest_history (id_dog, dt, balance) as (
select 111, to_date('10.07.2022', 'dd.mm.yyyy'), 10 from dual union all
select 111, to_date('15.08.2022', 'dd.mm.yyyy'), 0 from dual union all
select 111, to_date('20.09.2022', 'dd.mm.yyyy'), 15 from dual union all
select 111, to_date('15.07.2022', 'dd.mm.yyyy'), 25 from dual union all
select 111, to_date('15.07.2022', 'dd.mm.yyyy'), 35 from dual union all
select 222, to_date('15.07.2022', 'dd.mm.yyyy'), 5 from dual union all
select 222, to_date('15.08.2022', 'dd.mm.yyyy'), 7 from dual union all
select 222, to_date('15.09.2022', 'dd.mm.yyyy'), 0 from dual union all
select 222, to_date('03.03.2023', 'dd.mm.yyyy'), 33 from dual union all
select 222, to_date('04.04.2023', 'dd.mm.yyyy'), 44 from dual union all
select 222, to_date('10.05.2023', 'dd.mm.yyyy'), 0 from dual
) select * from rest_history


Результат для данного примера:
111 | 10.07.2022 | 14.08.2022
111 | 20.09.2022 | 31.12.2999
222 | 15.07.2022 | 14.09.2022
222 | 03.03.2023 | 09.05.2023

Всем удачи 🖖🏻

#конкурс
Канал Oracle Developer | Чатик 💬
3👍1
Активно голосуем за решения

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

Во вторник у нас стартанул #конкурсRestHistory по решению задачки уровня Junior/Middle.
Отправил мне её один из подписчиков.

Что у нас получилось
Откликнулось 5 коллег, некоторые из них придумали аж 2 решения 🔥

1️⃣ Дмитрий - решение1
2️⃣ Kirill Leontev - решение1, решение2
3️⃣ Александр Олифер - решение1, решение2
4️⃣ Ilya Kochegarov - решение1, решение2
5️⃣ Ruslan Shevyrev - решение 1

Спасибо ребятам, кто решил тряхнуть своими знаниями SQL 👍
Как говорится, зарядка для ума не кому не повредит 🧠🏋️‍♂️, а если за неё еще и денежку заплатят, так вообще красота 😊

Кстати, был бы я расторопным хедхантером, я бы как минимум постарался с ними пообщаться 😈

Что требуется от тебя, дорогой подписчик?
Посмотреть на решения и поставить лайк, тем, которые понравились.

Победителя выберем по наибольшему количеству реакций 🏆

Итоги подведем завтра. Всем удачи 🖖🏻

#конкурс
Канал Oracle Developer | Чатик 💬
🔥7👍3
Итоги конкурса #конкурсRestHistory

Друзья, всем привет!
Подводим итоги голосования.

Участники и количество реакций
Реакции по решениям суммируются.

1️⃣ Дмитрий - решение1 - 2
2️⃣ Kirill Leontev - решение1, решение2 - 7
3️⃣ Александр Олифер - решение1, решение2 - 21
4️⃣ Ilya Kochegarov - решение1, решение2 - 8
5️⃣ Ruslan Shevyrev - решение 1 - 29

Победители и призы
🥇Ruslan Shevyrev - решение 1 - 3К руб
🥈Александр Олифер - решение1, решение2 - 2К руб
🥉Ilya Kochegarov - решение1, решение2 - 1К руб

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

Всем остальным спасибо за участие, был интересно посмотреть на полет фантазии🔥👍

Все таки, основная цель конкурса не заработать денег, а порешать задачки, себя показать и на других посмотреть 😉

Понравилось? Ставь 👍

Хорошей пятницы 👯‍♀️

Обсудить итоги в чатике 💬

#конкурсRestHistory
Канал Oracle Developer | Чатик 💬
👍29
This media is not supported in your browser
VIEW IN TELEGRAM
👍2
Друзья, всем привет! 🌟

У меня для вас важные новости.

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

Я знаю, что большинство из вас подписывалось на канал с техническим контентом, и это обязательно будет, но я решил немного расширить тематику.
Буду также публиковать новости с рынка, советы по карьерному росту, работу с психологическими барьерами и многое другое, что может помочь вам в развитии soft-скиллов и вашей карьеры в целом.

Начнем на этой неделе: я буду выпускать посты в тестовом формате, чтобы увидеть вашу реакцию 📊.
Если формат понравится, продолжим в том же духе. Ожидайте первый пост уже сегодня 👍.

Надеюсь, вам зайдет 😊

Канал Oracle Developer | Чатик 💬
👍65🔥4
Чат GPT вред или польза?

Друзья, всем привет! 🌟

У всех на слуху новый модный молодежный инструмент ChatGPT и другие нейросети. Да, я сам время от времени ими пользуюсь, пытаясь облегчить себе работу в написании кода, но приходится постоянно вносить правки в написанный код. Нейросети на данный момент полностью нас заменить не могут. Поэтому можете вздохнуть спокойно и идти работать дальше. Деньги сами себя не заработают 😉

Какую пользу я вижу от ChatGPT для разработчиков?
Я считаю, если ты опытный программист и хорошо понимаешь код, то ты сможешь облегчить себе работу и сэкономить 20-30% своего времени. Почему только на 20-30%? Потому что все равно придется исправлять за нейросетью код, ведь это программа, написанная машиной, а не человеком.
Может быть, через 3-4 года ChatGPT сможет делать полноценное функциональное приложение. Но сейчас это скорее виртуальный помощник, который постоянно развивается и улучшается.

Как опытному разработчику использовать ChatGPT и получать от него пользу?
Можно очень быстро создать каркас необходимого приложения. Но для этого нужно подумать, что необходимо сделать, какой функционал должен быть в приложении и так далее. Это похоже на постановку задачи с прописыванием ТЗ, чтобы все было максимально понятно сотруднику.
Даже если максимально правильно описать ТЗ и ChatGPT создаст заготовку, она может быть не рабочей. Поэтому необходимо понимать, что при генерации скелета, на него нужно нанизывать небольшое количество "мяса". Чтобы это ожило, нужно знание предметной области, то есть программирование на том языке, на котором генерируется приложение, будь то Oracle PL/SQL, Java, JavaScript – не суть важно.

Без знания хотя бы базовой разработки не обойтись. Желательно, чтобы уровень был средним и выше. Как минимум, необходимо пройти хотя бы базовые курсы по разработки.

Просто взять, использовать ChatGPT и говорить, что вы теперь программист, пока не получится. А может быть и к счастью. Нас пока не могут заменить 🤖

Канал Oracle Developer | Чатик 💬
👍23🔥2👎1
Как вырасти по карьерной лестнице и выйти на доход в 500К

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

Сегодня речь пойдет о деньгах и карьере 💰
Есть верные способы, как из года в год расти в деньгах:
🔸постоянно учиться;
🔸повышать свои профессиональные навыки в программировании;
🔸брать больше ответственности, проявлять себя;
🔸уходить оттуда, где вас тормозят.

Знаете, я веду наш канал уже 4 года, а работаю разработчиком - 19 лет. Мало, что поменялось за это время. Все хотят расти в деньгах, но делают не совсем правильные действия. Прокачивают себя в программировании, становятся профессионалами своего дела, но забывают про мягкие навыки – умение общаться с коллегами и начальством, развивать своё мышление, необходимое для карьерного роста и заработка денег.

Почему это важно?
Одно без другого не работает. Если ты хороший программист, но не умеешь себя продать работодателю и не знаешь себе цену, то ты стоишь ровно столько, сколько имеешь. Можно ничего не делать, просто лежать дома и пить пиво у телевизора 🍺, жалуясь на работодателей, что они не видят в тебе талант.
Это всё из-за неправильного подхода и мышления.

Проверенный временем фактор роста — это прокачка soft skills, и чем выше ты поднимаешься по карьерной лестнице, тем больше тебе нужно развивать эти навыки 🌱.
Имея только hard skills, максимум, что ты можешь заработать — 200-250К в месяц, даже с 20-летним стажем.

Как выглядит обычная карьерная лестница.
Первый этап
🔸Стажер – обычно студенты, первичное погружение в IT, ~6 месяцев.
🔸Джуниор – работает над простыми задачами под руководством опытных коллег.
🔸Мидл – решает сложные задачи, пишет код самостоятельно, старшие коллеги проверяют результаты.
🔸Сеньор – ставит задачи джуниору и мидлу. Здесь нужны soft skills для общения, умение правильно ставить и закрывать задачи, управленческие навыки. Зарплата: 250-400К.

Второй этап
Подразумевает больше soft skills. Нужно быть не только специалистом, но и развивать навыки руководителя. Зарплата: 350К - 1 млн.
🔸Техлид/архитектор – проектирование систем, архитектурные решения, проработка технических вопросов, управление командой тех специалистов и др. Больше про технику.
🔸Тимлид – планирует и организует работу команды, распределяет задачи, мотивирует сотрудников, отвечает за результаты перед заказчиком. Больше про людей.
🔸Технический эксперт/архитектор – постоянное обучение, больше ответственности, решение сложных задач для компании, архиектурные решения и др.

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

Чем больше ты участвуешь в стратегических бизнес-процессах компании, чем больше пользы от тебя, чем больше ты повышаешь качество процесса разработки, тем выше твой доход.
Поэтому важно постоянно обучаться программированию и прокачивать свои soft skills.
Если вы хотите вырасти в доходе до 500К и выше, нужно развивать hard и soft skills.

Именно поэтому, я решил добавить модули по развитию, в том числе soft-скилов, в свои программы обучения, чтобы вы получали всестороннее развитие 🎓

Всем до завтра 🤝

Обсудить в чате 💬

#softskills #карьера
Канал Oracle Developer | Чатик 💬
👍39🔥152
Друзья, всем привет!

Вернемся к технической тематики, расслабим мозг, тряхнем нашими базовыми знаниями по SQL, PL/SQL.

Попробуем новый формат вопросиков 😉

Канал Oracle Developer | Чатик 💬
👍14🔥3🤩1
Что из перечисленного является правильным способом завершения процедуры в PL/SQL?
Anonymous Quiz
18%
a) END PROCEDURE;
1%
b) FINISH;
80%
c) END;
1%
d) COMPLETE;
8
Какие из перечисленных операторов используется для управления курсором в PL/SQL?
Anonymous Quiz
9%
a) OPEN
11%
b) FETCH
0%
c) CLOSE
79%
d) Все вышеперечисленные
9👍3
Какой оператор используется для изменения существующей таблицы в Oracle SQL?
Anonymous Quiz
1%
a) CREATE TABLE
90%
b) ALTER TABLE
7%
c) UPDATE TABLE
2%
d) MODIFY TABLE
9