powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста, как создать JOB по событию
14 сообщений из 14, страница 1 из 1
Подскажите пожалуйста, как создать JOB по событию
    #40082294
ArtemS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Помогите пожалуйста разобраться с созданием джоба по событию.
Задача: нужно как то создать событие в Oracle (которое не будет ждать конца выполнения процедуры), на которое будет реагировать JOB и запускать необходимую процедуру с параметрами.
Перечитав множество литературы, так и не понял как это всё реализовать! Может у кого то есть опыт с такой реализацией?
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082296
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBMS_JOB, DBMS_SCHEDULER
https://docs.oracle.com/database/121/ARPLS/d_job.htm#ARPLS019
https://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72235
DBMS_SCHEDULER вроде как помодней, но у DBMS_JOB (хоть он в новых версиях съэмулирован через DBMS_SCHEDULER) есть одна непревзойденная фишка -- задание будет запущено только после COMMIT, и проигнорируется при ROLLBACK
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082307
ArtemS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров, спасибо за ссылки. я их уже давно перечитал. мне не ясна сама методология.
Как создать событие и каким образом на это событие будет реагировать джоб или шедуллер?
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082313
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда, наверное, стоит более подробно рассказать, что хочется
Просто создать JOB внутри процедуры, чтоб он выполнялся параллельно с выполнением основного потока, создать (из процедуры) задание, которое запустится по завершении процедуры и подтверждения транзакции или вообще какой-то внешний процесс (который сам по себе задание), который отслеживает выполняемые в текущий момент операторы и запускающий определенное задание при определенных условиях
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082321
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemS
Вячеслав Любомудров, спасибо за ссылки. я их уже давно перечитал. мне не ясна сама методология.
Как создать событие и каким образом на это событие будет реагировать джоб или шедуллер?

совершенно верно спрашиваете (имхо)
методологию (кроме прочего ..) помогают понять примеры

например, событие (например) создание (например) таблицы (например) в схеме вашего пользователя
например пусть посредством шедулера отправит sms (например) владельцу схемы с её именем и подробностями ..
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082347
ArtemS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров, весь смысл заключается в том, что бы в процессе выполнения одной процедуры был инициирован вызов второй процедуры с параметрами и не нужно ждать ее завершения. Запустили вторую процедуру и забыли за нее, не смотря на то что она будет выполняться пол часа или два часа!
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082348
ArtemS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish, не могу найти внятный пример и по этой причине нет чёткого понимания методологии! на сколько я сейчас понял, нужно изначально создать TYPE с описанными полями, потом создать queue_table, потом создать queue и запустить его. Потом создать "программу" DBMS_SCHEDULER.CREATE_PROGRAM(..) которая будет инициировать запуск необходимой мне процедуры. Далее создать DBMS_SCHEDULER.CREATE_JOB(..) который будет инициировать запуск "программы" + указывается какой queue использовать.
Если даже весь процесс я правильно описал, тогда не понятно, для чего параметр event_condition при создание джоба и как передать параметры в программу? да и как потом порождать эти события?
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082359
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemS,

в старых(древних) версиях достаточто было DBMS_JOB.SUBMIT

с учетом, что нужен commit

.....
stax
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082639
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
ArtemS,

в старых(древних) версиях достаточто было DBMS_JOB.SUBMIT

с учетом, что нужен commit

.....
stax

я в прошлой доработке как раз с подобной задачей столкнулся . и DBMS_JOB.SUBMIT в моем случае наиболее удобным показался. никаких лишних приседаний. единственный минус - прибить такой процесс сложнее. но работает как часы.
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082688
ArtemS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бросил гиблое дело разобраться с созданием джоба по событию и создал процедуру которая создает джоб через пакет шедуллера после отрабатывания автоматически удаляется. то что мне по сути и нужно было!
Вот пример процедуры, может кому то понадобиться:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
create or replace PROCEDURE RunProcedIndependSesNotWait(
                                                        In_OwnerJOB         IN VARCHAR2, 
                                                        In_NameRunProcedure IN VARCHAR2, 
                                                        In_CntArgumentProc  IN NUMBER,
                                                        In_ArrArgument      IN ARRAY_ARGUMENT_TAB
                                                        ) is

v_OwnerJOB          VARCHAR2(100):='"'||In_OwnerJOB||'"';
v_TmpNameJob        VARCHAR2(100);
BEGIN

        v_TmpNameJob:='"TMP'||TO_CHAR(SYS_CONTEXT ('USERENV', 'SID'))||'"';

        DBMS_SCHEDULER.CREATE_JOB (
                                   job_name             =>  v_OwnerJOB||'.'||v_TmpNameJob, --название джоба
                                   job_type             =>  'STORED_PROCEDURE', --тип джоба
                                   job_action           =>  In_NameRunProcedure,-- вызываемая процедура
                                   number_of_arguments  =>  In_CntArgumentProc, --кол-во входных параметров у процедуры
                                   start_date           =>  sysdate,  --время старта джоба                              
                                   enabled              =>  FALSE,  -- по умолчанию при создание нельзя включать джоб
                                   auto_drop            =>  TRUE,   -- автоудаление джоба по завершению выполнения процедуры
                                   comments             =>  ''      -- комментарий к джобу
                                   );
        FOR i in 1..In_ArrArgument.count LOOP

            DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(      -- присваивание значение входным параметрам согласно номеру по порядку параметра
                         job_name => v_OwnerJOB||'.'||v_TmpNameJob, -- название джоба
                         argument_position => In_ArrArgument(i).NUM_ARGUMENT,                -- номер параметра
                         argument_value => In_ArrArgument(i).VAL_ARGUMENT);    --значение параметра
        END LOOP;

            DBMS_SCHEDULER.SET_ATTRIBUTE( -- отключение логирования
                     name => v_OwnerJOB||'.'||v_TmpNameJob, 
                     attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);

            DBMS_SCHEDULER.enable( -- включение джоба
                     name => v_OwnerJOB||'.'||v_TmpNameJob);
                     
        EXCEPTION 
            WHEN OTHERS 
            THEN 
                
                RAISE;

END RunProcedIndependSesNotWait;



Процедура может создавать джобы в разных схемах, но не забывает о грантах!

Модератор: Используйте тег SRC
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082722
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemS
Код: plsql
1.
2.
3.
4.
5.
EXCEPTION 
            WHEN OTHERS 
            THEN 
                
                RAISE;

Пиши побольше бесполезного кода, чудак.
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082733
ArtemS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, а сложно было немного подраскинуть мыслями и понять что тут не просто RAISE, а была интерфейсная процедура подсистемы логирования, которая разработана сторонней организацией и согласно договорным отношениям я не имею права где либо ее публиковать? смысл публикации примера процедуры не в обработки ошибок типа OTHERS, а сама реализация необходимого инструмента!
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082771
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemS
а сложно было немного подраскинуть мыслями и понять что тут не просто RAISE, а была интерфейсная процедура подсистемы логирования, которая разработана сторонней организацией и согласно договорным отношениям я не имею права где либо ее публиковать?
Чудак, ты просто не умеешь вырезать "секретный" код правильно. А мне твои интимные проблемы, о которых ты наивно полагаешь, что кто-либо был обязан догадаться, глубоко побоку.
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как создать JOB по событию
    #40082940
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemS

Код: plsql
1.
        v_TmpNameJob:='"TMP'||TO_CHAR(SYS_CONTEXT ('USERENV', 'SID'))||'"';



Как много джобов сможет создать твоя процедура из одной сессии?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста, как создать JOB по событию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]