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 для начинающих: краткий гид и полезные советы"

👋 Друзья, всем привет!
Сегодня необычный пост, и, возможно, кому-то из вас он покажется слишком простым.
Но, как показывает практика, в наш канал периодически добавляются начинающие Oracle-разработчики.
Уверен, им будет полезно иметь под рукой такой обзорный текст.

🚀 Итак, поехали!

1️⃣ Зачем нужен PL/SQL?

PL/SQL — это языковое расширение для SQL. С его помощью мы можем решить задачи, которые нельзя решить силами простого SQL.

2️⃣ Какие возможности даёт PL/SQL?

PL/SQL поддерживает:
🔸 Блоки
🔸 Кастомные типы данных
🔸 Переменные и константы
🔸 Управляющие конструкции
🔸 Коллекции
🔸 ООП
🔸 Функции/процедуры
🔸 Пакеты
🔸 Триггеры
🔸 Обработку ошибок
🔸 Расписания

3️⃣ Чем хорош PL/SQL?

Интеграция с SQL

🔸для разработки нам не требуются специальные знания;
🔸мы можем встраивать SQL-запросы напрямую в код.

Высокая производительность

🔸выполнение блоков PL/SQL на сервере снижает нагрузку на сеть и экономит время;
🔸поддержка пакетных операций (FORALL, BULK COLLECT) минимизирует переключение контекста между SQL и PL/SQL.

Поддержка транзакций

Одно из требований ACID — согласованность изменений.
В PL/SQL у разработчика есть возможность гибкого управления транзакциями, что позволяет писать качественный и производительный код.

Оптимизация под Oracle

PL/SQL активно использует различные фичи Oracle. Например, использование пакетов вместо отдельных функций или процедур даёт ощутимый выигрыш в производительности.

4️⃣ Зачем нужно знать PL/SQL?

📚 История Oracle на постсоветском пространстве насчитывает несколько десятилетий и различных версий этой СУБД. Один и тот же функционал может быть реализован самыми разными способами.
Поэтому полноценная поддержка, рефакторинг, развитие и миграции кода невозможны без уровня хотя бы middle+.

💡 Кроме того, как мы выяснили ранее, PL/SQL — это не просто язык разработки, это значительная часть экосистемы Oracle. Владение этим инструментом открывает перед вами все возможности этой СУБД.

5️⃣ О каких возможностях речь?

Помимо базовых возможностей, описанных выше, это ещё и:

🔸Oracle AQ (Advanced Queues);
🔸Динамический SQL;
🔸Использование встроенных пакетов Oracle (например, работа с файлами или HTTP);
🔸Компиляция функций в особенном режиме, например, DETERMINISTIC или PARALLEL_ENABLE;
🔸Компиляция кода на других языках, например, C или Java;
🔸Условная компиляция ($if, $else и т.п.);
🔸Поддержка типов данных XML, JSON
🔸Прочие возможности, о которых рассказывается на курсе PL/SQL Advanced.

Заключение

🔥 Друзья, это очень краткая выжимка возможностей PL/SQL.
Более подробно о них мы рассказываем в нашем курсе "Мастер Oracle PL/SQL".

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

📩 Более подробную информацию о программе курса можно узнать у нашей поддержки.
📝 А если вам интересно проверить свой уровень, то уже в этот понедельник мы опубликуем небольшой тест на знание PL/SQL.

#Oracle #Junior #PLSQL #Pavel_Dolganov
Канал Oracle Developer | Чатик 💬
Наши студенты – настоящие бойцы!

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

Посмотрите, какие отзывы оставляют ученики во время обучения на наших курсах. Они не просто проходят обучение – они растут, пробиваются, выходят на новый уровень! Кстати, отзыву пару дней.

❗️ Два года самостоятельного обучения – книги, YouTube, ChatGPT… но все равно ощущение, что пазл не складывается.
👉 А на курсе – четкая система, понимание причинно-следственных связей, навык писать мощные запросы.

Итог?

💥 Человек стал разбираться в оптимизации, применяет знания прямо на работе, а теперь уже планирует курс по секционированию.

Почему? Потому что обучение работает

Наши ребята не тратят годы на самостоятельные попытки – они берут готовую систему и выходят на 200К+ в разы быстрее.

💰 Следующий шаг за тобой!

На следующей неделе мы открываем анкету предзаписи на курс по "Программирование на Oracle PL/SQL".

🎯 Если ты зарабатываешь меньше 200К и хочешь вырасти в доходе, как наши ученики, то готовься – скоро старт! 🚀

#Oracle #PLSQL #Зарплата #Карьера #IT #Обучение
Канал Oracle Developer | Чатик
Динамический SQL в PL/SQL

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

Сегодня технический пост, поговорим о такой особенности Oracle, как Динамический SQL. 📊

Пакет DBMS_SQL появился ещё в версии Oracle 7.1, так что многие из вас наверняка сталкивались с динамическими запросами в своей практике. А чтобы освежить знания, предлагаю небольшую задачку! 🚀

Есть таблица COUNTRY:

create table COUNTRY
(
id NUMBER(3) not null,
name VARCHAR2(100 CHAR) not null,
iso_alpha_2 VARCHAR2(2 CHAR),
iso_alpha_3 VARCHAR2(3 CHAR)
);


Пример данных:
| id  | name      | iso_alpha_2 | iso_alpha_3 |
|-----|-----------|-------------|-------------|
| 36 | АВСТРАЛИЯ | AU | AUS |
| 40 | АВСТРИЯ | AT | AUT |
| 44 | БАГАМЫ | BS | BHS |
| 48 | БАХРЕЙН | BH | BHR |


📌 Задача:
Написать метод, который вернёт данные из этой таблицы в отсортированном виде.
🔶 Поле для сортировки — любое из строковых атрибутов (name, iso_alpha_2, iso_alpha_3).
🔶 Направление сортировки — по возрастанию или по убыванию (выбирается параметром).

Присылайте свои решения в наш чатик 💬

А если хочется не просто покодить, а разобраться в динамическом SQL глубже, ждём вас в этот четверг на вебинаре.

Длительность: ~1,5 часа
🎓 Формат: немного теории, демонстрация кода + разбор реальных примеров.

💡 О чём поговорим:
EXECUTE IMMEDIATE: работа с DML, DDL и параметрами
Разница между нативным и пакетным SQL
Безопасность и защита от SQL-инъекций
Динамические курсоры

📩 Ссылку на Zoom пришлём в четверг — не пропустите! Следите за обновлениями в канале.

#PLSQL #динамическийSQL #Oracle #Pavel_Dolganov #вебинар

Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Отзыв от студента
Павел Долганов
Расти или стоять на месте? История одного разработчика

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

Сегодня у нас в гостях Александр, который в прошлом году прошёл обучение на курсе "Мастер Oracle PL/SQL", а прямо сейчас работает на пятом потоке нашего курса по оптимизации. 🚀

Вот о чём мы поговорили с Сашей:
🔶в чём были его сложности до курса по PL/SQL;
🔶почему он выбрал платное обучение, а не поиск информации в интернете;
🔶как изменилась его жизнь после курса;
🔶что помогает ему брать ответственность за свою жизнь на себя.

🎧 Длительность: 10 минут. Запись уже на скорости x1.5.

00:00 - Представление
00:33 - Почему пошёл на курс по PL/SQL
01:24 - Обратная связь о курсе
02:31 - Как изменилась жизнь после обучения
04:50 - Почему пошёл на курс, а не стал искать информацию в свободном доступе
05:58 - Почему раньше не пришёл к Денису
06:59 - Напутствие от Саши
07:46 - Что помогает взять ответственность за свою жизнь на себя?

Самое важное в этом аудио - в конце ❤️

Друзья, такие отзывы очень вдохновляют нас. И мы уже работаем над новыми материалами и форматами. Единственный в этом году поток по PL/SQL стартует уже в марте. Так что не упустите шанс присоединиться!

🔗 Записывайтесь и становитесь "Мастером Oracle PL/SQL!", освойте навыки программирования Oracle PL/SQL на высшем уровне🚀

👉 АНКЕТА ПРЕДЗАПИСИ ⬅️

#PLSQL #разработка #карьера #отзывы #Pavel_Dolganov
Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Геометрическая прогрессия: простая задача с изюминкой! 🔝

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

Сегодня понедельник, а значит, самое время для технического поста ⚙️📚

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

Как известно, любой член геометрической прогрессии вычисляется по формуле:

aₙ = a₁ * qⁿ⁻¹

где:
🔹 aₙ — n-й член прогрессии
🔹 a₁ — первый член прогрессии
🔹 q — знаменатель прогрессии
🔹 n — номер члена последовательности

📌 Задача:

Написать метод (или анонимный блок), который принимает на вход:
🔶 первый член прогрессии (положительное целое число)
🔶 знаменатель прогрессии (положительное целое число)
🔶 предел прогрессии (положительное целое число, больше первого члена)

Необходимо:
вывести в терминал 💻 все элементы возрастающей геометрической прогрессии.

⭐️ Задание со звёздочкой:
Вывести не все члены прогрессии, а только конкретный (например, пятый).

Делитесь своими решениями в нашем чатике 💬

🎯 А если хочется не просто попрограммировать, а увидеть изящное решение — ждём вас в этот четверг на вебинаре!

🗓 Когда: четверг
Длительность: 1 час
🎓 Формат: немного теории 📖 + демонстрация кода 💻 + разбор новых фишечек Oracle 🚀
⏺️ Будет ли запись: НЕТ!

📢 Деталей пока не раскрываем, чтобы не спойлерить решение задачки! 😉

👉 Всё узнаете в четверг — следите за обновлениями в нашем канале!

#PLSQL #Oracle #Pavel_Dolganov #вебинар #задачка

🔗 Канал Oracle Developer | Чатик💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Геометрическая прогрессия: простая задача с изюминкой - решение

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

В понедельник мы предложили вам реализовать метод для вывода элементов возрастающей геометрической прогрессии. Спасибо всем, кто принял участие в обсуждении и поделился своими решениями в чатике! 🔥

С выходом 21-й версии Oracle эту задачу можно решить так:

  FOR i IN p_min, repeat i * q_val WHILE i < p_max LOOP
dbms_output.put_line('n' || i_tmp || ' = ' || i);
i_tmp := i_tmp + 1;
END LOOP;

📌 Где:
🔹 p_min — первый член прогрессии
🔹 q_val — знаменатель прогрессии
🔹 p_max — предел прогрессии
🔹 i_tmp — текущий член прогрессии

Если интересно поговорить про циклы или узнать, какие ещё новые фишечки приготовила для вас корпорация Oracle, приходите сегодня в 19:00 мск на наш очередной вебинар. 🚀

Что вас ждет
▫️ Немного теории
▫️Новые возможности Oracle 21+
▫️ Вопросы с собеседований
▫️ Разбор практических примеров

⚠️⚠️⚠️ Записи не будет!

Зато будет возможность задать вопросы и разобрать свои кейсы в прямом эфире.

Кому будет полезно?
🔸 Начинающим разработчикам — чтобы понимать, какие виды циклов использовать для решения своих задач.
🔸 Мидлам — чтобы быть в курсе новых фишечек Oracle .
🔸 Всем, кто хочет уверенно проходить собеседования.

🎤 ВедущийПавел Долганов.

📅 Подключайтесь сегодня в 19:00 мск!
Будет много полезного.

➡️ Ссылка на ZOOM ⬅️

⚠️ Возможность подключиться ограничена Zoom: максимум 100 участников, успевайте.

#Oracle #PLSQL #циклы #вебинар #анонс #Pavel_Dolganov

Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Сравнение объектов в PL/SQL: простая задачка на разогрев

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

Понедельник – отличный день, чтобы размять мозги над небольшой задачкой 🤔
Сегодня хотим предложить вам поближе познакомиться с объектами в Oracle.

Задача:

В схеме HR создан пользовательский тип:

CREATE OR REPLACE TYPE EmployeeType AS OBJECT (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
department_id NUMBER
);
/


Нужно

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

Сравнение emp1 и emp2: Объекты равны
Сравнение emp1 и emp3: Отличаются атрибуты: employee_id, first_name.

Ждем ваши решения в 👉 чатике 💬

💡 Если тема зайдет, то в четверг проведем вебинар, где разберем:
🔶 Что такое OBJECTS в Oracle?
🔶 Когда и зачем их использовать?
🔶 В чем отличие от records?
🔶 Плюсы и минусы на реальных примерах.

Длительность: 1 час
🎓 Формат: немного теории + live-coding + примеры из практики.

⚠️⚠️⚠️ Записи не будет!

📩 Ссылку на Zoom пришлем в четверг — следите за обновлениями в канале!

🔥 Всем продуктивной недели!

#oracle #plsql #objects #Pavel_Dolganov

Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Сравнение объектов в PL/SQL: простая задачка на разогрев. Вебинар 📽

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

Сегодня четверг - день наших тематических посиделок в Zoom 💬

В понедельник мы предложили вам несложную задачку на сравнение двух экземпляров объектов в PL/SQL.
Но решений нам прислали не так много… 🤔
Либо задача неактуальная, либо тема объектов оказалась не очень востребована. 🤷‍♂️

Поэтому сегодня на обещанном вебинаре я:

расскажу, какие возможности дают нам объекты в Oracle;
покажу, чем отличаются объекты от записей;
объясню, в чем практическая польза объектов в PL/SQL;
разберу решение этой задачи;
поделюсь с вами своими кейсами.

🔥 Кому будет полезно?

📌 Новичкам — узнаете, зачем вообще нужны объекты и какие они дают возможности лично вам;
📌 Мидлам — структурируете имеющиеся знания, увидите плюсы и минусы применения объектов;
📌 Сеньорам — будет возможность поучаствовать в дискуссии и поделиться своим опытом.

Длительность: 1 час
💡 Формат: немного теории + live-coding + ответы на вопросы.

⚠️⚠️⚠️ Записи не будет!

Зато будет возможность разобрать свои кейсы в прямом эфире!

🎤 ВедущийПавел Долганов.

📅 Подключайтесь сегодня в 19:00 мск!
Будет много полезного.

➡️ Ссылка на ZOOM ⬅️

⚡️ Места ограничены! Zoom пускает только 100 участников, так что не тормозите!

Готовы прокачать свой PL/SQL? Тогда увидимся на вебинаре! 🚀

#Oracle #PLSQL #объекты #вебинар #анонс #Pavel_Dolganov

Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Хранимая процедура с секретом – разберешься?

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

Прошлая неделя прошла под флагом PL/SQL-марафона (подробности были тут). Судя по отзывам, он вам зашел! 🚀 Мы уже готовим серию вебинаров на откликнувшиеся вам темы. 🔥 Но перед этим — небольшая задачка, решение которой вам скоро пригодится 😉

Итак,
💡 Задача:
Нужно написать хранимую процедуру, которая принимает параметр любого типа и выводит его значение на экран.
⭐️ Дополнительное задание для знатоков: если параметр типа nested table, вывести количество записей в коллекции.

Простая задача? Давайте проверим! 😏

Делитесь своими решениями в нашем чатике 💬

📅 Разбор задачи будет в четверг, так что следите за обновлениями! 👀

#PLSQL #Oracle #Pavel_Dolganov #задачка

🔗 Канал Oracle Developer | Чатик💬
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Хранимая процедура с секретом – разберешься?

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

Во вторник мы подкинули вам задачку про гибкие параметры хранимых процедур в Oracle. Спасибо всем, кто прислал решение и принял участие в жаркой 🔥 дискуссии! Многие сразу догадались, что речь идёт про ANYDATA. Но главный вопрос: а зачем это вообще нужно на практике? 🤔

У меня есть для вас один интересный кейс, и уже в следующий четверг мы обязательно его обсудим. Следите за анонсами! 📅

А пока разберёмся с ANYDATA и решением задачки.

💡Что такое ANYDATA

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

Когда может быть полезен

🔶 интеграции, API
🔶 EAV-архитектура
🔶 многослойные пользовательские интерфейсы, и т.п.

Основное преимущество для разработчика — отсутствие необходимости хранить метаданные, а также самому реализовывать валидацию и парсинг пользовательских данных. Anydata берет всё это на себя! 🚀

А теперь решение задачки 📚

1️⃣ Процедура с параметром

CREATE OR REPLACE PROCEDURE p_get_anydata_value
(
p_param IN anydata
) IS
l_anytype anytype;
l_typecode PLS_INTEGER;
l_varchar_value VARCHAR2(255 Char);
l_num_value NUMBER;
l_collection t_numbers;
l_status VARCHAR2(64 CHAR);
BEGIN
-- Проверяем тип данных в ANYDATA
l_typecode := p_param.GetType(l_anytype);

IF l_typecode IN (dbms_types.TYPECODE_NAMEDCOLLECTION
,dbms_types.TYPECODE_TABLE) THEN
-- Извлекаем коллекцию
IF p_param.GetCollection(l_collection) = dbms_types.SUCCESS THEN
l_status := 'record_count=' || l_collection.count();
ELSE
l_status := 'ошибка извлечения коллекции';
END IF;
ELSIF l_typecode = dbms_types.TYPECODE_VARCHAR2 THEN
IF p_param.GetVarchar2(l_varchar_value) = dbms_types.SUCCESS THEN
l_status := l_varchar_value;
END IF;
ELSIF l_typecode = dbms_types.TYPECODE_NUMBER THEN
IF p_param.GetNumber(l_num_value) = dbms_types.SUCCESS THEN
l_status := l_num_value;
END IF;
ELSE
l_status := 'неподдерживамый тип параметра';
END IF;
dbms_output.put_line(l_status);
END p_get_anydata_value;
/


2️⃣ Пример вызова

create or replace type t_numbers is table of number;
/

begin
dbms_output.put_line('anydata.ConvertNumber:');
p_get_anydata_value(anydata.ConvertNumber(25));
dbms_output.put_line('anydata.ConvertVarchar2:');
p_get_anydata_value(anydata.ConvertVarchar2('Это строка'));
dbms_output.put_line('anydata.ConvertCollection:');
p_get_anydata_value(anydata.ConvertCollection(t_numbers(1, 2, 3, 4, 5)));
end;
/


3️⃣ Вывод в консоль

anydata.ConvertNumber:
25
anydata.ConvertVarchar2:
Это строка
anydata.ConvertCollection:
record_count=5


🔥 Как вам задачка? Возможно, у вас тоже есть интересные кейсы с ANYDATA? Или вы придумали, как его использовать в своём проекте? Делитесь мнением в нашем чатике 💬

#PLSQL #Oracle #Pavel_Dolganov #задачка

🔗 Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
💡5 шагов к зарплате 200К+ в 2025 году!

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

Я часто получаю вопросы в личке:

«Денис, ну я же нормальный специалист. Опыт 5-7 лет, задачи решаю, тесты пишу, заказчик доволен… Почему я до сих пор сижу на зп 150-180К, а кто-то получает 220-250К — и это считается нормой?»

Отвечаю.

📌 В 2025 году быть просто «нормальным специалистом» уже недостаточно. Если вы хотите ЗП от 220К и выше, вы должны уметь:

Писать качественный и читаемый код, применять паттерны проектирования
Уметь в микросервисную архитектуру, работать с API и интеграциями
Тестировать свой код через юнит-тесты
Иметь навыки оптимизации SQL
И главное — уметь себя продавать на рынке

🔥 И вот вам свежий кейс 🔥

Мы недавно отбирали ребят на курс. Пришел парень — всего 2 года опыта по PL/SQL, но:

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

💥 Итог: получил оффер на 240К. Без «10 лет в банке», не имея 3х лет стажа и т.п.

Или пример того самого Паши, который в свои 23 со стажем 2,5 года уже зарабатывает 210К и планирует в этом году стать senior-разработчиком.

А теперь вопрос к вам:

👉 Вы держитесь за свои 150К с 5+ годами стажа, потому что боитесь изменений?
👉 Или потому что «ещё не время»?
👉 Или потому что не знаете, с чего начать?
👉🏻 Или просто не хотите инвестировать в свои знания?

Что бы вы ни выбрали, ответ будет один: нужно начать с себя

📅 Уже через 5 дней стартует курс «Мастер Oracle PL/SQL» — последний в этом году.

💡 Что вас ждет на курсе:

Системное обучение PL/SQL от экспертов в своем деле
Теория + очень много практики
Классический Oracle + новинки версии 21с
трехзвенка, API, юнит-тесты
Сертификат об окончании, карьерная поддержка, помощь с резюме
Помощь с подбором вакансий — не останетесь без работы!

💰 Окупаемость курса — 1-2 месяца на вашей новой работе.

Пропустите — и следующая возможность будет только в 2026 году. А это уже другой рынок, другие конкуренты.

📌 Если давно хотели — время пришло!

Пишите в поддержку, увидимся 4 апреля

Удачи! И пусть PL/SQL принесет вам уверенность в завтрашнем дне и достойный доход! 💪

#oracle #plsql #карьера #зарплата #собеседование #резюме #курс

Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Anydata в реальном проекте: зачем и как использовать? 🎯

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

На прошлой неделе мы с вами решали задачку про Anydata.
Решение многим понравилось, но вопрос "зачем это вообще нужно на практике?" по-прежнему остается актуальным 🤔

Я обещал подкинуть вам реальный кейс – ловите! 🎯

Представьте: у вас в схеме есть интеграционный пакет, который обменивается данными со сторонним API 🌐
Или, если вам ближе DWH, пусть это будет формирование витрин по расписанию .

Задача простая – запустить произвольный PL/SQL-метод асинхронно или по расписанию.

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

Какое решение, кроме динамического SQL, вы могли бы предложить

Делитесь своими решениями в нашем чатике 💬

Разбор задачи, как обычно, в четверг 🔥

#Oracle #PLSQL #Anydata #Pavel_Dolganov #задачка

🔗 Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Anydata в реальном проекте: зачем и как использовать? 🎯 Решение задачи

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

Во вторник мы кидали вам практическую задачку по Anydata. Сегодня публикуем обещанное решение 👇🏻

Ключевая идея — использовать dbms_scheduler, т.к. по сравнению с классическим dbms_job он предлагает гораздо больше возможностей:

расширенное логирование запусков
цепочки заданий (chains)
сложные повторения
программы

Более подробно об этом мы говорим на курсе Мастер Oracle PL/SQL.

Что мы делаем конкретно в этой задаче

1️⃣ Используем пакет dbms_describe для анализа метода

Нам понадобится:
🔶 тип данных t_describe
🔶 метод describe_procedure, который проанализирует процедуру и поймет, какие параметры она принимает на вход.

2️⃣ Реализуем маппинг типов данных
Нам нужно сопоставить типы данных Oracle с теми, что поддерживает dbms_scheduler.
В коде за это отвечает метод get_oratype_name.

3️⃣ Создаем программу
Она будет запускать асинхронно или по расписанию произвольный PL/SQL-метод.

4️⃣ Привязываем к программе параметры метода
через dbms_scheduler.define_program_argument.

5️⃣ Создаем джоб
Для передачи параметров используем sys.jobarg_array, основанный на объекте sys.jobarg.

Пример вызова процедуры:
DECLARE
v_import_data t_credit_table;
v_arguments sys.jobarg_array;

BEGIN
IF v_import_data IS NOT empty THEN
v_arguments := sys.jobarg_array(
sys.jobarg(1, anydata.ConvertCollection(v_import_data)),
sys.jobarg(2, anydata.ConvertChar(const_pkg.c_yes)));

-- Создадим и запустим джоб
user_jobs_pkg.create_user_job(p_program_name => 'p_process_contracts',
p_program_action => $$PLSQL_UNIT || '.run_job',
p_arguments => v_arguments);
END IF;
END;
/


Код пакета user_jobs_pkg в комментариях к этому посту 👇🏻

Коллеги, это решение может показаться громоздким, но оно из серии "сделал и забыл". ✍️
Один раз настроили, отладили - и можно вызывать асинхронно любые методы. Прелесть же?! 😉

Напишите в комментариях, что думаете по этому поводу? 🤔
Если зашло, ставьте по традиции жирный 👍🏻, мы старались.

На этом тему anydata в Oracle считаем закрытой 😊 Сорри, если она вам приелась, но для senior-разработчика это 💯 полезный навык.

Друзья, также напоминаю, что уже завтра стартует счастливый 1️⃣4️⃣ поток курса Мастер Oracle PL/SQL 🚀

Если вы хотите:
🔶 увидеть еще больше кейсов из реальных проектов;
🔶 научиться работать с трехзвенкой;
🔶 посмотреть на новинки в Oracle 21c;
🔶 наконец-то начать писать юнит-тесты;
🔶 запилить в гитхаб свой собственный крутой pet-проект 🤟

, то успевайте 🕙.
Следующая такая возможность будет нескоро. 🤷‍♂️

#Oracle #PLSQL #Anydata #Pavel_Dolganov #задачка

🔗 Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Пятничный тест по PL/SQL

Коллеги, всем привет!

Давайте разомнемся в пятницу перед выходными 🏋🏻‍♀️
Вопросики по PL/SQL для уровня middle/senior.

Погнали!


А где-то в фоне стартовал 14й поток по PL/SQL. Ребята начинают 2.5 месячное путешествие по просторам PL/SQL. Еще есть время присоединиться 😉
Пиши в поддержку 🚀

#Oracle #PLSQL #Pavel_Dolganov #тест
🔗 Канал Oracle Developer | Чатик 💬
Друзья, всем привет! 👋🏻

На этой неделе у нас пройдёт особенный эфир. Сегодня мы рады представить нашего гостя — Игоря Мельникова.

👨‍💼 Игорь — один из наиболее авторитетных экспертов в области Oracle и PostgreSQL в русскоязычном сообществе.
До 2022 года он занимал позицию главного консультанта в Oracle СНГ, затем стал ведущим экспертом в Postgres Pro . В настоящий момент Игорь - независимый консультант, он помогает крупным компаниям в проектах, связанных с диагностикой, оптимизацией и миграцией баз данных.

🎙 Его имя хорошо известно тем, кто следит за индустрией: он выступал на PGConf.SPB, PGMeetup и других профильных конференциях и вебинарах. Игорь умеет доносить технически сложные темы ясно, точно и доступным языком.

📌 Что будет в эфире:

🔶 Переключение контекста: как работает и на что влияет
🔶 Как и для чего использовать pragma UDF
🔶 Технология PL/Scope и её использование в статическом анализе
🔶 Расширенная статистика: как передать информацию оптимизатору при работе с табличными функциями
🔶 подходы к внедрению этих практик с минимальными издержками

📍 Эфир будет особенно полезен тем, кто:
пишет или ревьюит PL/SQL-код
оптимизирует производительность БД
хочет «выжать» максимум из существующего кода без его переписывания

📅 Эфир: четверг, 24 апреля
🕖 Время: 19:00 МСК
🎦 Формат: live-разбор + ответы на вопросы
📬 Ссылка будет опубликована в день эфира — рекомендуем включить уведомления

⚠️ Записи не будет — приходите вовремя. Ограничение в эфире - 100 мест.
Ждём вас!

#oracle #plsql #performance #udf #PLScope #optimizer #производительность #эксперт #анонс #вебинар
Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья, всем привет! 👋

Напоминаем, что сегодня в 19:00 по МСК состоится мощный технический эфир в Zoom:
«PL/SQL-функции в SQL-запросах: где теряются миллисекунды?» 🎯

Спикер — Игорь Мельников: экс-главный консультант Oracle и Postgres Pro, эксперт по оптимизации с 20+ годами опыта 👨🏻‍💻

Поговорим о:
🔶 Переключении контекста между SQL и PL/SQL
🔶 PRAGMA UDF и её применении
🔶 Рефакторинге через PL/Scope
🔶 Табличных функциях и планах выполнения
🔶 Том, как внедрить всё это быстро и без боли.

📌 Подойдёт PL/SQL-разработчикам, архитекторам и всем, кто хочет, чтобы «летало» 🚀
📹 Формат: доклад + вопросы
⚠️ Записи не будет! 100 мест. Только эфир, живое общение и шанс задать свой вопрос.

Ссылку пришлём в канал ближе к началу.
Включай уведомления, чтобы не пропустить.
Увидимся! 😉

#oracle #plsql #performance #оптимизация #анонс #вебинар

Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Учиться у тех, кто сам не перестаёт учиться

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

Мы продолжаем делиться с вами важными новостями из жизни нашей онлайн-школы! 📚

В январе мы писали пост о получении лицензии Минобразования. Но решили на этом не останавливаться! 😉

Денис и Павел прошли профессиональную переподготовку и получили квалификацию «педагог дополнительного образования»! 🎓🎉

Да-да, теперь мы не только крутые практики с многолетним опытом в разработке, но и дипломированные преподаватели! 🔥
И это не просто «красивая бумажка» — это подтверждение того, что мы умеем и можем обучать на уровне, соответствующем государственным стандартам. 💪

Каждый из нас пришёл в преподавание своей дорогой:
🔶 Денису предложили провести внутреннее обучение в QIWI, где он тогда работал 💼
🔶 Павел ещё в университете больше прислушивался к предпринимателям, которые иногда приезжали читать лекции.

Со временем мечта превратилась в хобби, которое, в свою очередь, выросло в полноценную онлайн-школу. Поэтому получение педагогического образования стало логичным шагом на пути к развитию. Ведь одно дело — объяснять «на пальцах» в узком кругу, а совсем другое — выступать перед широкой аудиторией и подавать материал так, чтобы «понял даже лабрадор», как любит говорить Денис. 😉

Что это даёт онлайн-школе

🔸 Более качественные и гибкие программы с учётом методических стандартов
🔸 Прозрачность и легитимность — особенно важно для корпоративного обучения
🔸 Авторитет. У кого вы предпочтёте учиться:
— у человека, который «и швец, и жнец, и один в поле воин»,
— или у команды, которая постоянно развивается, получает дополнительное образование и привлекает таких же энергичных, объединённых общей идеей инженеров?

А что это даёт вам — нашим студентам

Уверенность в том, что вы учитесь у тех, кто знает не только «как работает», но и как объяснить «так, чтобы дошло».
Эффективные обучающие программы: никакой воды, только то, что действительно помогает развиваться.
Индивидуальный подход: мы знаем, что все студенты индивидуальны, поэтому адаптируем стиль и содержание уроков под ваши способности и потребности. 🎯

Что же дальше

Дальше — ещё интереснее! 🤟🏻

Мы уже работаем над запуском новых курсов, где обязательно применим наши новые знания и навыки. А ещё усиливаем команду и продолжаем делать качественный контент, чтобы вам было ещё легче и увлекательнее учиться. 🌟

Спасибо, что вы с нами! ❤️
Идём дальше 🚀

#oracle #карьера #диплом #сертификация #эксперт #plsql

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️Одна из ТОП-болей Oracle-разработчика

Друзья, привет! Сохраните пост, чтобы показать тим-лиду и закрыть вечные споры на ревью 😉

БОЛЬ: Отсутствие единой системы стандартов форматирования кода в ORACLE

Как происходит в реальной жизни?
Приходишь в новый проект, открываешь код и получаешь мешанину из запросов.
У одного всё ЗАГЛАВНЫМИ, у другого строчными, третий чередует регистр через слово. Кто-то называет таблицы во множественном числе «Users», кто-то с префиксом tab_ - "tab_users", а где-то всплывает «user_tbl». Запросы форматируются как попало.
Каждый уверен: «Я так привык — значит, правильно». Единого документа нет, ревью превращается в мини-баттл, новичок тратит месяц, чтобы только «раскусить» локальные правила.

СУТЬ ПРОБЛЕМЫ
У Oracle по-прежнему нет официального «ГОСТа» (и не будет) на оформление PL/SQL: нет аналога PEP-8 как в Python или Google-кодстайла как для Java. Всё держится на устных договорённостях и личных привычках. Каждая компания — маленькое «княжество» со своим письмом.

Итог хаоса
• читаемость падает;
• ревью затягиваются;
• баги всплывают на проде, потому что «не заметил в каше»;
• время онбординга увеличивается и т.п.

📉 К чему это приводит

Представьте, что всю жизнь ездили с левым рулём, а потом внезапно пересели на правый.
Первые дни — скорость падает, концентрация уходит в ноль, ошибок становится больше.
То же и с кодом: каждый новый проект — переучивание с нуля.
А бизнес-дедлайны никто не отменял: сроки горят, деньги утекают, команда нервничает.

🛠 Как можно это решить (и заработать очки в карму)🔥

1️⃣ Соберите мини-круг: пару тимлидов + самых заинтересованных разработчиков.

2️⃣ Сделайте короткий чек-лист с описанием:
 – единый регистр для ключевых слов и идентификаторов;
 – общие префиксы/постфиксы для таблиц, индексов и других объектов;
 – правила именования пакетов, процедур и др.;
 – правила написания комментариев и многое другое;

желательно, чтобы правила форматирования можно было задать в IDE.

3️⃣ Автоматизируйте проверку: поставьте любой SQL-formatter/linter в pre-commit.

4️⃣ Зашейте правило в CI: пока линтер красный, код не пройдёт.

5️⃣ Загрузите документ в Confluence и прикрепите ссылку в шаблон PR/MR.

6️⃣ Проведите мит-ап для разработчиков: объясните «зачем» это нужно.

⚠️ Важный момент: переформатирование существующей кодовой базы может выполняться по-разному. Команда выбирает, как лучше сделать.

💡 Фишка для проактивных

Видишь хаос? Предложи драфт-стандарт сам. Так ты:
• ускоряешь ревью;
• качаешь личный бренд «не ноет — решает»;
• чаще всего получаешь плюсик к росту до тимлида.

⚖️ Итог

Кодстайл — это не про «перфекционизм ради перфекционизма».
Это договорённость, которая превращает личные заготовки в командный актив.
Чем раньше вы договоритесь, тем меньше боли, нервов и денег потеряете.

📌 Сохрани себе и отправь тимлиду. Пусть стандарты работают, а люди пишут бизнес-логику, а не расставляют пробелы вручную.

А какие стандарты у вас были при смене работы, пишите в Чатик 💬 посмотрим, что за дичь есть на просторах.

Если пост наберет 100 🔥 расскажу как мы в Qiwi-решали эту проблему c автоматической проверкой PL/SQL-кода в CI. Проблема не простая, в виду того, что разработчики пользовались аж четырьмя разными IDE.

#Oracle #PLSQL #кодстайл #teamlead #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀