我有这样的代码:
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
答案 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有详细信息。