|
Программирование >> Oracle
1596 Приложение А NO PARSE BOOLEAN IN DEFAULT INSTANCE BINARY INTEGER IN DEFAULT FORCE BOOLEAN IN DEFAULT Назначение аргументов процедуры SUBMIT описано ниже. JOB. Идентификатор задания. Присваивается системой (этот параметр передается в режиме OUT). Его можно использовать для получения информации о задании из представлений USER JOBS или DBA JOBS по идентификатору задания. Кроме того, некоторые процедуры, в частности RUN и REMOVE, требуют единственного параметра - идентификатора задания - для определения того, какое именно задание выполнять или удалять из очереди. WHAT. Действие, которое необходимо выполнить. Можно передавать PL/SQL-оператор или блок кода. Например, чтобы выполнить хранимую процедуру P, можно передать процедуре строку P; (включая точку с запятой). Значение параметра WHAT будет помещено в следующий PL/SQL-блок: DECLARE job BINARY INTEGER := :job; next date DATE := :mydate; broken BOOLEAN := FALSE; BEGIN WHAT :mydate := nextdate; IF broken THEN :b := 1; ELSE :b := 0; END IF; END; Вот почему любой оператор надо завершать точкой с запятой (;). Чтобы WHAT можно было заменить соответствующим кодом, точка с запятой необходима. NEXT DATE. Время следующего (а поскольку мы только посглаем задание - первого) выполнения задания. Стандартное значение - SYSDATE - означает выполнять немедленно (после фиксации транзакции). INTERVAL. Строка, содержащая функцию, вычисляющую время следующего выполнения задания. Можно считать, что значение этой функции выбирается с помощью оператора select ... Irom dual. Если передать строку sysdate+l, сервер выполнит SELECT sysdate+l INTO :NEXT DATE FROM DUAL. Ниже описаны особенности задания интервала выполнения задания, предотвращающие его смещение. NO PARSE. Указывает, анализировался ли параметр WHAT при отправке задания. Анализируя строку, можно определить, выполнимо ли вообще задание. В общем случае параметру NO PARSE надо всегда оставлять стандартное значение, False. При установке значения True параметр WHAT принимается как есть , без проверки допустимости. INSTANCE. Этот параметр имеет значение только в режиме Parallel Server, когда сервер Oracle работает на кластере слабо связанных машин. Он задает экземпляр, на котором будет выполняться задание. По умолчанию он имеет значение ANY INSTANCE. Пакет DBMS JOB 1597 FORCE. Этот параметр также имеет значение только в режиме Parallel Server. При установке значения True (принятого по умолчанию) можно пос1лать задание с любым идентификатором экземпляра, даже если при отправке соответствующий экземпляр недоступен. При установке значения False отправка задания завершится неудачно, если указанный экземпляр недоступен. В пакете DBMS JOB есть и другие подпрограммы. Задание пос1лается на выполнение с помощью процедуры SUBMIT, a остальные подпрограммы позволяют манипулировать заданиями в очередях и выполнять действия по их запуску (RUN), удалению из очереди (REMOVE) и изменению (CHANGE). Ниже описаны наиболее часто используемые подпрограммы, включая входные данные и назначение. Подпрограмма Входные данные REMOVE номер задания CHANGE BROKEN Описание Удаляет задание из очереди. Учтите, что если задание выполняется, удаление не остановит его выполнение. Удаление из очереди гарантирует, что задание не будет выполнено снова, но уже выполняющееся задание при этом не останавливается. Для остановки выполняющегося задания необходимо прекращать работу соответствующего сеанса с помощью оператора ALTER SYSTEM. номер задания Эта процедура работает как оператор WHAT, NEXT DATE, UPDATE для представления JOBS. Она INTERVAL, INSTANCE, позволяет изменить любой параметр FORCE номер задания BROKEN (булево значение) NEXT DATE номер задания задания. Позволяет разрушить или восстановить задание. Разрушенное задание не выполняется. Задание, не выполнившееся успешно 16 раз подряд, автоматически помечается как разрушенное, и сервер Oracle больше не будет его выполнять. Выполняет задание немедленно, в приоритетном режиме (в пользовательском сеансе). Полезно при отладке не срабатывающих заданий. Теперь, когда вы достаточно хорошо представляете устройство пакета DBMSJOB и его возможности, рассмотрим, как выполнить задание однократно, как организовать его периодическое выполнение, как контролировать выполнение заданий и определять возникающие при этом ошибки. Однократное выполнение задания Многие из заданий в моей базе данных - однократные. Я часто использую пакет DBMS JOB как аналог запуска процесса в фоновом режиме с помощью & в ОС UNIX или команды start в среде Windows. Представленный ранее пример с отправкой сооб- 1598 Приложение А щения по электронной почте относится как раз к этой категории. Я использую пакет DBMS JOB не только для включения отправки сообщения в транзакцию, но и для того, чтобы ускорить выполнение этого действия. Вот одна из возможнгх реализаций этого действия, демонстрирующая однократное выполнение задания. Начну с небольшой хранимой процедуры для отправки сообщений по электронной почте с использованием средств стандартного пакета UTL SMTP: tkyte@TKYTE816> create or replace 2 PROCEDURE send mail (p sender IN VARCHAR2, 3 p recipient IN VARCHAR2, 4 p message IN VARCHAR2) 5 as 6 - Учтите, что надо указать хост, 7 - поддерживающий протокол SMTP и доступный для вас. 8 - К указанному хосту вы не получите доступа, поэтому его надо -> изменить 9 l mailhost VARCHAR2(2 55) := aria.us.oracle.com; 10 l mail conn utl smtp.connection; 11 BEGIN 12 l mail conn :=utl smtp.open connection(l mailhost, 2 5); 13 utl smtp.helo(l mail conn, l mailhost); 14 utl smtp.mail(l mail conn, p sender); 15 utl smtp.rcpt(l mail conn, p recipient); 16 utl smtp.open data(l mail conn) ; 17 utl smtp.write data(l mail conn, p message) ; 18 utl smtp.close data(l mail conn); 19 utl smtp.quit(l mail conn) ; 20 end; 21 / Procedure created. Теперь, чтобы определить продолжительность работы, я выполню эту процедуру дважды: tkyte@TKYTE816> set serveroutput on tkyte@TKYTE816> declare 2 l start number := dbms utility.get time; 3 begin 4 send mail(anyone@outthere.com, 5 anyone@outthere.com, Привет!); 6 dbms output.put line 7 (round((dbms utility.get time-l start)/100, 2) 8 seconds); 9 end; 10 / .81 seconds PL/SQL procedure successfully completed. tkyte@TKYTE816> / .79 seconds PL/SQL procedure successfully completed.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |