Планирование процедуры с помощью DBMS_SCHEDULER. PLS-00103: Обнаружен символ «NULL» при ожидании одного из следующих событий:;

Aug 21 2020

Я не могу запланировать выполнение задания.

Я сделал процедуру, которая записывает файлы CSV, и она работает, когда я ее выполняю.

Затем я попытался составить задание по расписанию:

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name => 'AUTOMATE_CSV_EXPORT',
    job_type => 'STORED_PROCEDURE',
    job_action => 'EXPORT_ALL_LYS_FOR_TABLEAU',
    number_of_arguments => 0,
    start_date => '20-AUG-20 2.05.00PM',
    repeat_interval => 'FREQ=WEEKLY; BYDAY=FRI; BYHOUR=23;',
    end_date => NULL,
    enabled => FALSE,
    auto_drop => FALSE,
    comments => 'hello i am a comment');

  DBMS_SCHEDULER.SET_ATTRIBUTE( 
    name => 'AUTOMATE_CSV_EXPORT', 
    attribute => 'logging_level', 
    value => DBMS_SCHEDULER.LOGGING_RUNS);
  
  DBMS_SCHEDULER.enable(
    name => 'AUTOMATE_CSV_EXPORT');
END;
/

Он не запускался в запланированное время, но это было, когда я запускал его следующим образом:

Я попытался отредактировать время запуска в мастере, и это дает мне эту ошибку:

Некоторое время назад я запланировал его запускать каждые 2 минуты, но он еще не запускался. Это определенно включено.


Поиск проблемы

TL; DR: планировщик работает !!! Единственное, что не работает, - это я добавляю свой адрес электронной почты, чтобы получать уведомления.

  1. Я запускаю его в той же схеме, в которой я его создал?

Я изменил задание на выполнение каждые 2 минуты.

^^^ так оно работает? Но я не вижу CSV в папке назначения. Я изменил дату начала на NULL, как в приведенном ниже коде, и это сработало! У меня есть CSV!

  1. Тестирование запланированного задания: test:
create or replace procedure test_print
is
begin
    dbms_output.put_line('Current date and time is : ' || 
    to_char(sysdate,'DD-MON-YYYY HH:MI:SS AM'));
end;

set serveroutput on;

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
    job_name => 'JOB_TEST',
    job_type => 'STORED_PROCEDURE',
    job_action => 'TEST_PRINT',
    number_of_arguments => 0,
    start_date => NULL,
    repeat_interval => 'FREQ=MINUTELY;INTERVAL=2;',
    end_date => NULL,
    enabled => FALSE,
    auto_drop => FALSE,
    comments => 'Testing job runs');
 
DBMS_SCHEDULER.enable(name => 'JOB_TEST');
END;
/

select job_name,output,status,owner 
from user_scheduler_job_run_details where  job_name='JOB_TEST';

полученные результаты:

То, что по-прежнему не работает, - это уведомления по электронной почте. Когда это единственное, что я редактирую, я получаю такую ​​ошибку:

Ответы

2 Noname Aug 21 2020 at 10:15

Скорее всего, вы создаете объекты в разных схемах, проверяете созданные задания и детали задания в текущей схеме с помощью этих представлений user_scheduler_jobsиuser_scheduler_job_run_details

Простая процедура, запускаемая каждые 2 минуты

  SQL>create or replace procedure test_print
      2  is
      3  begin
      4  dbms_output.put_line('Current date and time is : ' || to_char(sysdate,'DD-MON-YYYY HH:MI:SS AM'));
      5* end;
    SQL> /
    
    Procedure created.
    
    SQL> exec test_print();
    Current date and time is : 20-08-2020 09:22:59 PM
    
    PL/SQL procedure successfully completed.
    
    
    SQL> BEGIN
      2             DBMS_SCHEDULER.CREATE_JOB (
      3              job_name => 'JOB_TEST',
      4              job_type => 'STORED_PROCEDURE',
      5              job_action => 'TEST_PRINT',
      6              number_of_arguments => 0,
      7              start_date => NULL,
      8              repeat_interval => 'FREQ=MINUTELY;INTERVAL=2;',
      9              end_date => NULL,
     10              enabled => FALSE,
     11              auto_drop => FALSE,
     12              comments => 'Testing job runs');
     13
     14
     15
     16
     17
     18              DBMS_SCHEDULER.enable(
     19               name => 'JOB_TEST');
     20  END;
     21  /
     
  SQL> select job_name,output,status from user_scheduler_job_run_details
       2  where  job_name='JOB_TEST';

JOB_NAME   OUTPUT                                             STATUS
---------- -------------------------------------------------- ---------------
JOB_TEST   Current date and time is :20-08-2020 09:30:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:32:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:34:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:36:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:38:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:40:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:42:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:44:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:46:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-08-2020 09:48:05 PM   SUCCEEDED
JOB_TEST   Current date and time is :20-AUG-2020 09:50:05 PM  SUCCEEDED -- Modified date format in procedure
JOB_TEST   Current date and time is :20-AUG-2020 09:52:05 PM  SUCCEEDED
JOB_TEST   Current date and time is :20-AUG-2020 09:54:05 PM  SUCCEEDED
JOB_TEST   Current date and time is :20-AUG-2020 09:58:05 PM  SUCCEEDED
JOB_TEST   Current date and time is :20-AUG-2020 10:02:05 PM  SUCCEEDED
JOB_TEST   Current date and time is :20-AUG-2020 10:04:05 PM  SUCCEEDED
JOB_TEST   Current date and time is :20-AUG-2020 09:56:05 PM  SUCCEEDED
JOB_TEST   Current date and time is :20-AUG-2020 10:00:05 PM  SUCCEEDED

18 rows selected.


SQL> select job_name,last_start_date,last_run_duration from user_scheduler_jobs
  2  where job_name='JOB_TEST';

JOB_NAME   LAST_START_DATE                                    LAST_RUN_DURATION
---------- -------------------------------------------------- ------------------------------
JOB_TEST   20-AUG-20 10.08.05.070000 PM US/CENTRAL            +000000000 00:00:00.009000

Изменить: - Простое наблюдение, что вы смогли запустить задание вручную, но не из планировщика, подразумевает, что задание и процедура не находятся в одной схеме.