过程以异步方式插入记录

时间:2012-10-03 12:38:24

标签: oracle jsp stored-procedures plsql oracle10g

我有一个包,我在调用一个过程来向表中插入记录,我使用sys.DBMS_LOCK.sleep (<>);

以2分钟的间隔调用此过程两次

我遇到的问题是来自应用程序的调用表单仍处于打开状态,直到插入完成。

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

由于

更新

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

由于上述原因,我的页面一直保持到第二个程序结束。我想在第一个程序完成或用户提交页面时立即关闭页面。

更新2

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

给我编译错误错误的参数数量调用Submit。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

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

试试这个:

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

  

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

SUBMIT()可以采用INTERVAL参数。它位于DBMS_JOB的文档中。 Find out more

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

或使用队列。这取决于你真正想要实现的目标。