0

我有一个程序包,我正在调用一个将记录插入表的过程,并且我以 2 分钟的间隔调用此过程两次,使用sys.DBMS_LOCK.sleep (<>);

我面临的问题是来自应用程序的调用表单在插入完成之前仍然打开。

我如何确保当我提交我的页面并且页面应该关闭时,插入应该发生在后端某种异步调用中。在数据库程序中是否有任何异步关键字来做这种活动?

谢谢

更新

putData(empNo,EmpName);
sys.DBMS_LOCK.sleep (<>);
putData(empNo,EmpName);

由于上述原因,我的页面一直停留到第二个程序完成。我想在第一个过程完成或用户提交页面后立即关闭页面。

更新 2

DBMS_JOB.SUBMIT(ln_dummy, 'begin putData('||empNo,EmpName||'); end;');

给我编译错误错误的参数数量来调用提交。

我该如何解决这个问题?

4

1 回答 1

5

您的 PutData() 过程需要两个参数。您可能认为您正在传递两个参数,但事实并非如此。此外,如果 EmpName 是一个字符串 - 这似乎很可能 - 您需要将其包装在转义引号中。基本上,您在这里编写动态 SQL,这总是很棘手。

试试这个:

DBMS_JOB.SUBMIT(ln_dummy, 'begin putData('||empNo||','''||EmpName||'''); end;'); 

“其他问题是如何以 10 分钟的间隔运行这些作业”

SUBMIT() 可以采用 INTERVAL 参数。它在 DBMS_JOB 的文档中。 了解更多

但是,如果您希望每次迭代使用不同的参数值,您可能需要重新考虑您的应用程序设计。您应该有一个轮询表以获取要处理的值的过程。

或者使用队列。这取决于你真正想要达到的目标。

于 2012-10-03T14:32:01.423 回答