ORACLE dbms_scheduler.create_job建立job作業遭遇PLS-00306
今天,一同事建立job作業時遇到一個問題,在使用dbms_scheduler.create_job建立job作業遭遇PLS-00306報錯。
具體的報錯資訊如下:
dbms_scheduler.create_job
*
ERROR at line 2:
ORA-06550: line 2, column 3:
PLS-00306: wrong number or types of arguments in call to 'CREATE_JOB'
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored
PLS-00306報錯相關分析處理過程如下:
一、job作業建立語句
begin
dbms_scheduler.create_job(
job_name =>'DSG_CHECKER',
job_type =>'PLSQL_BLOCK',
job_action =>'declare
begin
update SCOTT.dsgchecker set time=SYSDATE;
commit;
end;',
start_date =>SYSDATE,
repeate_interval => 'FREQ=MINUTELY;INTERVAL = 5');
end;
/
二、排除資料庫版本問題
據同事說,這個job作業在其他版本資料庫上能執行,在19c執行的時候碰到這個錯誤,我親自驗證後發現無論哪個版本,
相同的job作業建立語句報錯都是相同的。
Oracle 19.7.0.0上的執行,有PLS-00306報錯提示:
[oracle@oratop]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Jul 9 11:05:33 2021
Version 19.7.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.7.0.0.0
SYS@orcl1>alter session set container=PDBORCL;
Session altered.
SYS@orcl1>begin
dbms_scheduler.create_job(
job_name =>'DSG_CHECKER',
job_type =>'PLSQL_BLOCK',
job_action =>'declare
begin
update scott.dsgchecker set time=SYSDATE;
commit;
end;',
start_date =>SYSDATE,
repeate_inter 2 3 4 5 6 7 8 9 10 11 val => 'FREQ=MINUTELY;INTERVAL = 5');
end;
/ 12 13
dbms_scheduler.create_job(
*
ERROR at line 2:
ORA-06550: line 2, column 3:
PLS-00306: wrong number or types of arguments in call to 'CREATE_JOB'
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored
SYS@orcl1>
Oracle 11.2.0.4上的執行,有PLS-00306報錯提示:
[oracle@orcl11gpri ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Jul 24 06:18:17 2020
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> begin
dbms_scheduler.create_job(
job_name =>'DSG_CHECKER',
job_type =>'PLSQL_BLOCK',
job_action =>'declare
begin
update scott.dsgchecker set time=SYSDATE;
commit;
end;',
start_date =>SYSDATE,
repeate_interval => 'FREQ=MINUTELY;INTERVAL = 5');
end;
/ 2 3 4 5 6 7 8 9 10 11 12 13
dbms_scheduler.create_job(
*
ERROR at line 2:
ORA-06550: line 2, column 3:
PLS-00306: wrong number or types of arguments in call to 'CREATE_JOB'
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored
SQL>
三、問題解決
看job作業的建立語句,不太好看出來到底哪裡出現問題,由於自己做過開發,看他job作業目的是想
建立個job定期執行一個update語句,那就透過開發工具plsql工具操作吧。
sys或者具有dba許可權的使用者登入資料庫,找到jobs選中右鍵選擇新建(New)
然後,按照建立語句填寫job相關的必要引數:Name ,Type,Action,Start date,Frequency,Interval,Job Class。
點選Apply按鈕提示報錯資訊如下:
到此為止,該job建立語句執行觸發PLS-00306的一個原因已經找到,就是start_date需要一個具體的日期。點選start date最
右側的下三角選取時間。
然後,點選View SQL按鈕檢視job作業建立語句,一定要在Apply前點選,否則看不到建立SQL語句:
begin
sys.dbms_scheduler.create_job(job_name => 'SYS.DSG_CHECKER',
job_type => 'PLSQL_BLOCK',
job_action => 'declare
begin
update scott.dsgchecker set time=SYSDATE;
commit;
end;',
start_date => to_date('09-07-2021 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval => 'Freq=Minutely;Interval=5',
end_date => to_date(null),
job_class => 'DEFAULT_JOB_CLASS',
enabled => true,
auto_drop => false,
comments => '');
end;
/
然後,點選Apply按鈕,job作業成功建立:
如果有需要,可以刪除掉相關job作業,根據建立語句進行調整重建即可。
總結:job作業建立,相關引數有具體的資料型別要求,一定要符合相關要求才行,本次是start date引數非法導致PLS00306.
這裡奉上job作業建立的官方線上指導文件:https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72235
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2780558/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle10g job 相關-dbms_scheduler.create_job(轉載)Oracle
- oracle建立job並執行jobOracle
- ORACLE查詢JOB資訊及JOB建立Oracle
- Oracle JOB 建立例項Oracle
- oracle 11g 建立 jobOracle
- oracle job的建立和刪除Oracle
- Oracle透過job定時建立表Oracle
- 通過oracle dbms_job建立tableOracle
- Oracle執行JOB報ORA-27492:無法執行作業Oracle
- Oracle作業(JOB)更新next_date的探討(轉載)Oracle
- Oracle使用DBMS_JOB建立的資料庫作業,遇到資料庫關閉狀態的排程Oracle資料庫
- plsql建立jobSQL
- 【JOB】Oracle中JOB的建立方法以及一個細節的探究Oracle
- oracle建立定時任務之dbms_jobOracle
- Oracle:建立JOB定時執行儲存過程Oracle儲存過程
- 批量刪除dbms_job建立的job
- oracle jobOracle
- DBMS_JOB.SUBMIT 建立job定時排程MIT
- Oracle中JOB的建立後不執行解決方法Oracle
- Oracle dbms_scheduler建立帶輸入引數的JOBOracle
- 執行hadoop作業 No job jar file set. User classes may not be found. See Job orHadoopJAR
- 基於Mesos的作業雲 Elastic-Job-Cloud 原始碼分析 —— 作業排程(一)ASTCloud原始碼
- Elastic-job實戰(分散式作業排程框架)AST分散式框架
- oracle job用法Oracle
- oracle job管理Oracle
- Oracle學習系列—Window作業系統下Oracle資料庫的手工建立Oracle作業系統資料庫
- Oracle 10g GATHER_STATS_JOB作業週六6點開始執行的原因Oracle 10g
- SQL Server記憶體遭遇作業系統程式壓榨案例SQLServer記憶體作業系統
- 使用DBMS_JOB和DBMS_SCHEDULER建立、管理job示例
- Oracle學習系列—Window作業系統下Oracle資料庫的手工建立(zt)Oracle作業系統資料庫
- 【JOB】Oracle JOB全面學習(DBMS_JOB和DBMS_SCHEDULER)Oracle
- oracle job管理(zt)Oracle
- oracle 定義jobOracle
- Oracle JOB的使用Oracle
- Oracle job備忘Oracle
- oracle job的用法Oracle
- oracle job 介紹Oracle
- oracle job 用法2Oracle