【问题标题】:Procedure to insert records asynchronously异步插入记录的过程
【发布时间】:2012-09-24 09:21:12
【问题描述】:

我有一个程序包,我在其中调用一个过程以将记录插入到表中,并且我使用 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;');

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

我该如何解决这个问题?

【问题讨论】:

  • @MartinWilson 请参阅上面的更新 2。我该如何解决这个问题?
  • 为什么你要这样做?是否只是因为插入需要很长时间才能完成,所以你想让它异步运行?如果是这样,我会看看为什么插入这么慢并修复它。

标签: oracle jsp stored-procedures plsql oracle10g


【解决方案1】:

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

试试这个:

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

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

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

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

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

【讨论】:

  • 感谢您解决了问题。另一个问题是如何以 10 分钟的间隔运行这些作业?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2011-05-05
  • 2018-05-11
  • 1970-01-01
相关资源
最近更新 更多