过程以异步方式插入记录

Jåc*_*cob 0 oracle jsp plsql stored-procedures oracle10g

我有一个包,我正在调用一个过程来向表中插入记录,我调用此过程两次,间隔为2分钟使用 sys.DBMS_LOCK.sleep (<>);

我面临的问题是我的呼叫形式,它来自应用程序仍然打开,直到插入完成.

我怎样才能确保当我提交我的页面和页面时应该关闭,插入应该在后端发生某种异步调用.在数据库程序中是否有任何异步关键字来执行此类活动?

谢谢

更新

putData(empNo,EmpName);
sys.DBMS_LOCK.sleep (<>);
putData(empNo,EmpName);
Run Code Online (Sandbox Code Playgroud)

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

更新2

DBMS_JOB.SUBMIT(ln_dummy, 'begin putData('||empNo,EmpName||'); end;');
Run Code Online (Sandbox Code Playgroud)

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

我该如何解决这个问题?

APC*_*APC 5

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

试试这个:

DBMS_JOB.SUBMIT(ln_dummy, 'begin putData('||empNo||','''||EmpName||'''); end;'); 
Run Code Online (Sandbox Code Playgroud)

"其他问题是如何以10分钟的间隔运行这些工作"

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

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

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