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;
/
正如@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;';