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 분마다 실행되도록 예약했는데 아직 실행되지 않았습니다. 확실히 활성화되어 있습니다.

문제 해결
TLDR : 스케줄러가 작동합니다 !!! 작동하지 않는 유일한 것은 알림을 받기 위해 이메일을 입력하는 것입니다.
- 내가 만든 것과 동일한 스키마에서 실행하고 있습니까?
2 분마다 실행되도록 작업을 변경했습니다.

- 예약 된 작업 테스트 : 테스트 :
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
편집 :-작업을 수동으로 실행할 수 있었지만 스케줄러에서 실행되지 않은 관찰은 작업과 절차가 동일한 스키마에 없음을 의미합니다.