Oracle 由于out参数分配错误,dbms_计划程序作业失败

Oracle 由于out参数分配错误,dbms_计划程序作业失败,oracle,dbms-scheduler,Oracle,Dbms Scheduler,我正在从一个过程创建一个一次性调度作业,在该过程中,我正在执行第二个存储过程(具有in和OUT参数),作为dbms_调度程序包中的plsql_块作业类型。现在,当我运行创建作业的主过程并调用第二个过程时,我得到以下错误,作业失败:第4行,第35列: > PLS-00363: expression '<null>' cannot be used as an assignment target > ORA-06550: line 5, column 35: PLS-00363

我正在从一个过程创建一个一次性调度作业,在该过程中,我正在执行第二个存储过程(具有in和OUT参数),作为dbms_调度程序包中的plsql_块作业类型。现在,当我运行创建作业的主过程并调用第二个过程时,我得到以下错误,作业失败:第4行,第35列:

> PLS-00363: expression '<null>' cannot be used as an assignment target
> ORA-06550: line 5, column 35: PLS-00363: expression '<null>' cannot be
> used as an assignment target ORA-06550: line 2, column 11: PL/SQL:

  


 -- Main Procedure
“||OUT|CD”
正在传递一个空字符串(即null),而不是一个可以赋值的变量。(将日期作为字符串传递也不是一个好主意,当然不能使用显式格式)。当作业运行该过程时,您希望OUT参数值在哪里;你真的想让你的作业动作中的匿名块对它们做些什么吗?有没有理由不创建一次作业来直接调用过程,然后为每次运行设置参数?
CREATE or replace PROCEDURE HBK_test_JOB 
( date_1 in date, date_2 in date,
                              O_RETURN_CD      OUT NUMBER,
                                      O_RETURN_MESSAGE OUT VARCHAR2) as
    
    LV_Error varchar2(100);
    
    begin
      
    begin
        O_RETURN_CD := 1;
        O_RETURN_MESSAGE := 'Success';
        
    insert  into test_trans_job
     values ( date_1, date_2, 'JKL');
     commit;
     exception
       when others then 
        LV_error := sqlerrm || sqlcode;
        
        O_RETURN_CD := 100;
        O_RETURN_MESSAGE := 'insert failed' || LV_error;
        
     end;
     
     update test_trans_job c
     set name = 'XYZ'
     where c.date1 = date_1
     and c.date2 = date_2;
     
    commit;
     
     exception
     when others then 
       LV_error := sqlerrm || sqlcode;
        
        O_RETURN_CD := 1001;
        O_RETURN_MESSAGE := 'failed'|| LV_error;
       
        end; ```
     
    
--JOB CALLING PROCEDURE
  ```  Create or replace procedure hbk_test_run_job ( date_1 in date, date_2 in date,
                                   OUT_REF_CUR_1 OUT SYS_REFCURSOR )
                                     as
        lv_run_id number;  
        LV_ERROR_MSSG varchar2(100);
        
                  
                   D1 date;
                   D2 date;
                    OUT_CD number;
                                   OUT_MSSG varchar2(500);
                 
     Begin
               SELECT MAX(H.RUN_ID)into LV_RUN_ID
                FROM SY_DSA_RUN_STATUS_HLSIL H;
                
                D1 := date_1;
                D2 := date_2;
               
                
                   DBMS_SCHEDULER.CREATE_JOB(
              JOB_NAME => 'TRANSACTION_DOWNLOAD_JOB_'||LV_RUN_ID,
              JOB_TYPE => 'PLSQL_BLOCK',
              JOB_ACTION =>        'begin
              hlsil.HBK_test_JOB('''||D1||''',
                                      '''||D2||''',
                                      '''||OUT_CD||''',
                                    '''||OUT_MSSG||''');                                                                  
                                      END;',
               NUMBER_OF_ARGUMENTS => 0,                        
              START_DATE => SYSTIMESTAMP + 1/1440,                        
              ENABLED => TRUE,
              AUTO_DROP => TRUE,
              COMMENTS => 'ONE TIME TRANS DWLD JOB RUN');
              
              OPEN OUT_REF_CUR_1 FOR 
              SELECT 'TRANSACTION DOWNLOAD JOB STARTED RUNNING IN THE BACKGROUND'
status
              FROM DUAL;
              
              EXCEPTION
                WHEN OTHERS THEN 
                  LV_ERROR_MSSG := SQLERRM(SQLCODE);
                  OPEN OUT_REF_CUR_1 FOR 
                  SELECT 'ERROR WHILE CREATING TRANS DOWNLOAD JOB' ||LV_ERROR_MSSG error
                   FROM DUAL;
              END;  ```