в чем разница между dbms_job и автономной транзакцией pragma
Разница между dbms_job и автономной транзакцией pragma
Ответы (1)
Кроме того, что они пишутся по-разному? Они так же похожи, как яблоки и бананы.
Пакет 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