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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Oracle】ORA-23421: job number XXXX is not a job in the job queueOracle
- ORACLE job作業BROKEN狀態無法改變與ORA-12005&ORA-06550Oracle
- oracle job管理(zt)Oracle
- Elastic-job實戰(分散式作業排程框架)AST分散式框架
- [20190531]建立job與commit.txtMIT
- Oracle中job的使用詳解Oracle
- Oracle資料庫定時器JobOracle資料庫定時器
- 房價網是怎麼使用分散式作業框架elastic-job分散式框架AST
- [20211206]toad下job建立檢視問題.txt
- 作業排程中介軟體 Elastic-Job-Cloud 原始碼分析 —— 高可用ASTCloud原始碼
- Oracle 定時任務job實際應用Oracle
- Oracle診斷案例-Job任務停止執行Oracle
- 使用oracle job定時傳送email郵件OracleAI
- Python程式碼解析: job = next(job for job in jobs if job.job_id == job_id)Python
- SeaTunnel如何建立Socket資料同步作業?
- 在Linux中,什麼是cron作業?如何建立一個cron作業?Linux
- oracle排程程式作業dbms_schedulerOracle
- oracle使用DBMS_SCHEDULER排程作業Oracle
- 用 Go 語言 buffered channel 實作 Job QueueGo
- 用 Go 語言實作 Job Queue 機制Go
- Oracle推出全球首個自治作業系統Oracle作業系統
- Oracle data link建立Oracle
- XXL-JOB定時任務框架(Oracle定製版)框架Oracle
- 將 CentOS 8 作業系統遷移到 Oracle LinuxCentOS作業系統OracleLinux
- Oracle OCP(20):建立表Oracle
- Oracle 建立序列語句Oracle
- Oracle 任務管理之 ----program(程式)---scheduler(計劃)--Job(任務)Oracle
- Oracle 11g 測試停庫對job的影響Oracle
- Disable the Evolve Job SYS_AUTO_SPM_EVOLVE_TASK in Oracle 12cOracle
- Collapse OS:為世界末日建立的作業系統作業系統
- 3 分鐘建立 Serverless Job 定時獲取新聞熱搜!Server
- 3 分鐘建立 Serverless Job 定時獲取新聞熱搜Server
- 【SQL】Oracle資料庫通過job定期重建同步表資料SQLOracle資料庫
- Oracle無法自動排程DBMS_JOB&DBMS_SCHEDULER案例分析Oracle
- 【BUILD_ORACLE】Oracle 19c RAC搭建(二)作業系統檢查與配置UIOracle作業系統
- Oracle大表快速建立索引Oracle索引
- Oracle如何建立B樹索引Oracle索引
- oracle 序列的建立與使用Oracle