具有OUT参数调用的Oracle DBMS_SCHEDULER.create_job

问题描述 投票:1回答:1

Env:Oracle 12c

不确定以下内容,需要确认。

如果我调用一个Job_type PLSQL_BLOCK计划作业,该作业将从systdate + 30秒开始执行,并且具有OUT参数,那么我假设在计划作业完成后,我将可以访问OUT参数值,即v_status-是基于下面的代码示例此正确吗?

只是不确定何时安排的作业。

create or replace package body my_package as

  procedure get_status ( in_curr_id    in      number,
                         o_status      out     varchar2 ) is

  begin
    select status 
    into o_status 
    from my_status_table 
    where curr_id = in_curr_id;
  end get_status;


  procedure process_task is

    v_plsql   varchar2(4000) := null;
    v_status  varchar2(10)   := null;
    v_curr_id number;
  begin
    v_curr_id := 100;
    v_plsql := 'begin get_status (in_curr_id => ' || v_curr_id || ',
                                  o_status   => ' || v_status  || '); end;'
    dbms_scheduler.create_job(job_name   => 'my_scheduled_job', 
                              job_type   => 'PLSQL_BLOCK', 
                              job_action => v_plsql,
                              start_date => sysdate + NUMTODSINTERVAL(30, 'SECOND'), 
                              enabled    => true);
    if v_status = 'OK' then
      -- do required processing
    else
      dbms_output.put_line(v_status);
  end process_task;

end my_package;
/
sql oracle plsql oracle12c
1个回答
1
投票

正如@Tejash指出的那样,DBMS_SCHEDULER内置没有任何东西可以将out参数的值存储在您的块中。您需要自己做。

更改此:

v_plsql := 'begin get_status (in_curr_id => ' || v_curr_id || ',
                              o_status   => ' || v_status  || '); end;'

至此:

v_plsql := 'declare s my_status_table.status%TYPE;
            begin get_status (in_curr_id => ' || v_curr_id || ',
                              o_status   => s); 
                  insert into my_status_table (curr_id, status)
                     values (' || v_curr_id || ', s);
                  commit;
            end;';
© www.soinside.com 2019 - 2024. All rights reserved.