ORACLE dbms_scheduler.create_job建立job作業遭遇PLS-00306

清風艾艾發表於2021-07-09

    今天,一同事建立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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章