Oracle 如何提交函数并继续执行后续步骤,而不必等待该函数完成?
我有这样一个代码:Oracle 如何提交函数并继续执行后续步骤,而不必等待该函数完成?,oracle,oracle-sqldeveloper,oracleforms,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表单中实现此功能的最佳方法是什么 如果无法在表单中实现它,我可以创建一个pl/sql函数来实现这一点,然后从我的表单
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表单中实现此功能的最佳方法是什么
如果无法在表单中实现它,我可以创建一个pl/sql函数来实现这一点,然后从我的表单中调用这个pl/sql函数
有人有什么好主意吗
谢谢!
MAX异步作业可以使用JavaBean从Oracle窗体运行。有详细信息。我将考虑提交一个立即运行一次的dbms\u作业,该作业将通过dbms作业调度器异步运行。正如你所说的,你不关心结果,如果你担心的话,这将是这个方法的一个大问题。下面是一个示例plsql块,您可以将其更改为循环中的单个dbms_作业行调用:
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 /
这里有一个很好的参考:
请记住,大多数DBA都会对可并发运行的并发dbms_作业的数量设置限制。在PLSQL中说,如果这是纯oracle表单,则无法执行此操作:可能会有所帮助。F是纯PL/SQL函数。没有链接到作业。我们不能告诉oracle直接调用F,然后继续吗?!假设我不关心结果。我不能并行运行它们吗!?这是为Oracle和SQL Server标记的。你真的在寻找一个对两者都有效的解决方案吗?或者应该删除SQL Server标记,因为您实际上只是在查看Oracle。
f
是数据库中的存储过程吗?或者只是在Oracle Forms PL/SQL JVM中运行的PL/SQL函数?我试过了,但有些可疑。请看我在《确保在代码中加入“提交”一词》上的新帖子。确保dbms_作业调度程序正在会话中运行-“从所有_作业中选择*”。如果所有的作品,请接受答案和标记。