如何提交功能并继续执行后续步骤而无需等待此功能完成?

时间:2016-01-14 21:27:26

标签: oracle oracle-sqldeveloper oracleforms

我有这样的代码:

FOR i IN 1 .. 20 
LOOP
   F(i); -- for each i, F(i) takes 20 minutes to be executed
END LOOP;

我正在寻找一种在调用F(1)之后完全调用F(2)的方法。我的意思是我不想等待F(1)成功执行然后调用F(2)。

我的目标是整个循环需要20分钟而不是400分钟。在Oracle Forms中实现此功能的最佳方法是什么?!

如果无法在表单中实现它,我可以创建一个pl / sql函数来执行此操作,然后从我的表单中调用此pl / sql函数。

有没有人有一个惊人的想法?!

谢谢! MAX

2 个答案:

答案 0 :(得分:2)

我会考虑提交一个dbms_job立即运行,它将通过DBMS作业调度程序异步运行。正如你所说的那样,你不关心结果,如果你这样做,那么这种方法将成为一个大问题。下面是一个示例plsql块,您可以将其更改为循环中的单个dbms_job行调用:

SQL> set serverout on
SQL> DECLARE
  2    jno BINARY_INTEGER;
  3  BEGIN
  4    dbms_job.submit(JOB       => jno,
  5                    WHAT      => 'declare X varchar2(200); BEGIN X := F(2) END;',
  6                    NEXT_DATE => SYSDATE);
  7    dbms_output.put_line(jno);
  8    COMMIT;  
  9  END;
 10  /

这里有一个很好的参考:

http://psoug.org/reference/dbms_job.html

请记住,大多数DBA会对可以并发运行的并发dbms_jobs数量设置限制。

答案 1 :(得分:-1)

可以使用java bean从Oracle表单运行异步作业。 This article有详细信息。