Кроме того, что они написаны по-разному?Они похожи на яблоки и бананы.
DBMS_JOB
создает расписание и управляет заданиями в очереди заданий.Он используется для запуска определенных процедур в запланированное время.Например, каждый день в 02:00, 08:00 и 16:00;или каждую субботу в 12:00 и т. д. Если вы работаете в Windows, это похоже на диспетчер задач.Или, в Unix, он называется Cron .
У него есть младший брат с именем DBMS_SCHEDULER
, который предоставляет гораздо больше возможностей.Хотя для простых работ я все еще использую DBMS_JOB
.Более подробная информация здесь: https://docs.oracle.com/database/121/ARPLS/d_job.htm#ARPLS019
Pragma
означает, что оператор является прагмой (директива компилятора).Прагмы обрабатываются во время компиляции, а не во время выполнения.Они передают информацию компилятору.
Прагма AUTONOMOUS_TRANSACTION
изменяет способ работы подпрограммы в транзакции.Подпрограмма, помеченная этой прагмой, может выполнять операции SQL и фиксировать или откатывать эти операции без фиксации или отката данных в основной транзакции.
Обычно используется для записи определенной информации из ваших процедур, не затрагивая основную процедуру (поскольку прагма позволяет процедуре logging зафиксировать свои вставки в таблицу журнала, не затрагивая основную процедуру -он может даже потерпеть неудачу (и неявный откат), но информация вашего журнала останется нетронутой и доступной для просмотра.)
Люди используют ее неправильно при решении проблемы с изменяющимися таблицами;Да, эта прагма «исправляет» проблему, но обычно НЕПРАВИЛЬНЫЙ способ решения этой проблемы.
Подробнее об автономных транзакциях здесь: https://docs.oracle.com/database/121/LNPLS/static.htm#LNPLS00609