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

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

Отец-основатель: @denis_dbd Кивилёв Денис
Download 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
👍4
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
👍10