Создание задания DBMS_SCHEDULER для оракула
Пытаясь создать работу, но не могу скомпилировать, я получаю эту ошибку. Есть вопрос на форумах оракула, он говорит, что я должен создать программу, чтобы обернуть это. Есть ли обходной путь для этого?
-- Created on 30.09.2014 by ALI.ORHAN
declare
-- Local variables here
i integer;
begin
-- Test statements here
dbms_scheduler.create_job(job_name => 'blabla'
,job_type => 'STORED_PROCEDURE'
,job_action => 'dingdongprocedure;'
,start_date => '30-OCT-14 10.00.00 PM'
,end_date => '15-JULY-08'
,repeat_interval => 'FREQ=WEEKLY BYDAY=TUE,FRI BYHOUR=10,13'
,enable => 'TRUE'
,comments => 'SUPREME COMMENT');
end;
После того, как я создал работу из PL/SQL Developer UI, я обнаружил ошибки синтаксиса, новый код приведен ниже;
- я использую sys.dbms_scheduler.create_job вместо dbms_scheduler.create_job. Я не знаю различий, но это не главное изменение.
- я использовал to_date, чтобы определить start_date, как новичок, я нашел эту лучшую практику.
Важно! Я добавил параметр job_class в 'DBMS_JOB$'. DBMS_JOB является встроенным классом заданий СУБД Oracle. Таким образом, вы найдете все вакансии с этим запросом:
select * from ALL_SCHEDULER_JOBS WHERE JOB_CLASS='DBMS_JOB$'
Важно Мой интервал был неправильным, вы должны поставить; между всеми параметрами, такими как
repeat_interval => freq=weekly;byhour=10, 13
- В моем первом коде задания есть еще одна синтаксическая ошибка, я использую enable вместо enable.
Я установил auto_drop false. Я предполагаю, что этот параметр используется, чтобы бросить работу, когда это делает его работу. Я имею в виду, если вы создаете работу, которая вносит изменения ежедневно с сегодняшнего дня до следующей недели. После достижения конечного времени эта работа была прекращена. Пожалуйста, поправьте меня, если я ошибаюсь.
sys.dbms_scheduler.create_job(job_name => 'BOMBASTICJOB' ,job_type => 'STORED_PROCEDURE' ,job_action => 'dingdongprocedure' ,start_date => to_date('30-09-2014 00:00:00' , 'dd-mm-yyyy hh24:mi:ss') ,end_date => to_date(null) ,job_class => 'DBMS_JOB$' ,repeat_interval => 'Freq=Weekly; ByDay=Tue, Fri; ByHour=10, 13' ,enabled => true ,auto_drop => false ,comments => '');
1 ответ
Я на 12.1.0.1.0. Вы можете создать работу в простом анонимном блоке:
SQL> BEGIN
2 DBMS_SCHEDULER.DROP_JOB (JOB_NAME => 'test_full_job_definition');
3 END;
4 /
PL/SQL procedure successfully completed.
SQL>
SQL> BEGIN
2 DBMS_SCHEDULER.create_job (
3 job_name => 'test_full_job_definition',
4 job_type => 'PLSQL_BLOCK',
5 job_action => 'BEGIN my_job_procedure; END;',
6 start_date => SYSTIMESTAMP,
7 repeat_interval => 'freq=hourly; byminute=0; bysecond=0;',
8 end_date => NULL,
9 enabled => TRUE,
10 comments => 'Job defined entirely by the CREATE JOB procedure.');
11 END;
12 /
PL/SQL procedure successfully completed.
SQL>
SQL> SELECT JOB_NAME, ENABLED FROM DBA_SCHEDULER_JOBS where job_name ='TEST_FULL_JOB_DEFINITION'
2 /
JOB_NAME ENABL
---------------------------------------- -----
TEST_FULL_JOB_DEFINITION TRUE
SQL>
Больше примеров здесь