Oracle 我们可以在PL/SQL中使用线程吗?
PL/SQL中是否有异步调用的特性? 假设我在一个代码块中,想多次调用一个过程,而不想麻烦这个过程何时返回,返回什么Oracle 我们可以在PL/SQL中使用线程吗?,oracle,asynchronous,plsql,Oracle,Asynchronous,Plsql,PL/SQL中是否有异步调用的特性? 假设我在一个代码块中,想多次调用一个过程,而不想麻烦这个过程何时返回,返回什么 BEGIN myProc(1,100); myProc(101,200); myProc(201,300); ... ... END; 在上述情况下,我不希望代码在执行(101200)之前等待myProc(1100)完成处理 谢谢。您可能需要查看DBMS\u调度程序 为完整性而编辑: Oracle 10g上提供了DMBS_调度程序。对于在此之前的版本,DB
BEGIN
myProc(1,100);
myProc(101,200);
myProc(201,300);
...
...
END;
在上述情况下,我不希望代码在执行(101200)之前等待myProc(1100)完成处理谢谢。您可能需要查看DBMS\u调度程序 为完整性而编辑: Oracle 10g上提供了DMBS_调度程序。对于在此之前的版本,DBMS_作业执行大致相同的任务
有关更多信息,请参阅:您可能需要查看DBMS\u调度程序 为完整性而编辑: Oracle 10g上提供了DMBS_调度程序。对于在此之前的版本,DBMS_作业执行大致相同的任务
有关更多信息,请参见:在DBMS\u作业中提交,如下所示:
declare
ln_dummy number;
begin
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(1,100); end;');
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(101,200); end;');
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(201,300); end;');
COMMIT;
end;
您需要将job_queue_processs参数设置为>0,以生成线程来处理作业。您可以通过检查查看用户作业来查询作业
请注意,这适用于Oracle 9i,但不确定10g有哪些支持。查看更多信息
编辑:添加未提交的提交在DBMS_作业中提交,如下所示:
declare
ln_dummy number;
begin
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(1,100); end;');
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(101,200); end;');
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(201,300); end;');
COMMIT;
end;
您需要将job_queue_processs参数设置为>0,以生成线程来处理作业。您可以通过检查查看用户作业来查询作业
请注意,这适用于Oracle 9i,但不确定10g有哪些支持。查看更多信息
<>编辑:添加了DMSMyTo调器和DbMSLJOB方法的遗漏提交< P> + 1,但也考虑是否应该使用不同的方法。 如果您有一个以逐行方式执行的过程,并且您发现它很慢,那么答案可能不是同时多次运行该过程,而是确保使用基于集合的aproach。在极端情况下,您甚至可以使用并行查询和并行DML来减少进程的挂钟时间
我提到这只是因为这是一个非常常见的错误。>p>+ 1,对于dbMSyToaServer和DbMSyJOB方法,还考虑是否应该使用不同的方法。
如果您有一个以逐行方式执行的过程,并且您发现它很慢,那么答案可能不是同时多次运行该过程,而是确保使用基于集合的aproach。在极端情况下,您甚至可以使用并行查询和并行DML来减少进程的挂钟时间我之所以提到这一点,只是因为这是一个非常常见的故障。这里解释了将数据卸载到平面文件的不同方法。其中一种方法显示了如何使用PL/SQL并行执行以加快速度
这里解释了将数据卸载到平面文件的不同方法。其中一种方法显示了如何使用PL/SQL并行执行以加快速度
这里显示了执行并行(多线程)PL/SQL的另一种方法: 使用dbms_作业或dbms_调度的缺点是,您不知道任务何时完成。我读到你不介意,但也许你将来会改变主意 编辑:
本文描述了另一种方法。它使用
dbms\u作业
和dbms\u警报
。警报用于发出作业已完成的信号(回调信号) 执行并行(多线程)PL/SQL的另一种方法如下所示:
使用dbms_作业或dbms_调度的缺点是,您不知道任务何时完成。我读到你不介意,但也许你将来会改变主意
编辑:
本文描述了另一种方法。它使用
dbms\u作业
和dbms\u警报
。警报用于发出作业已完成的信号(回调信号) 您考虑过使用Oracle高级队列吗?您考虑过使用Oracle高级队列吗?对于PL/SQL并行处理,您有以下选项:
我个人使用DBMS_调度器实现了一个并行处理系统,并使用DBMS_管道在“线程”之间进行通信。我对两者的结合感到非常高兴,我的主要目标(通过一个特别的重量级程序减少主要的处理时间)实现了 对于PL/SQL并行处理,您有以下选项:
我个人使用DBMS_调度器实现了一个并行处理系统,并使用DBMS_管道在“线程”之间进行通信。我对两者的结合感到非常高兴,我的主要目标(通过一个特别的重量级程序减少主要的处理时间)实现了 askTom在此列出的并行流水线方法提供了一种更复杂的方法,但实际上,与DBMS作业技术不同,您将暂停工作直到工作完成。也就是说,您确实要求使用“异步”技术,而DBMS_作业正是这方面的完美之选。askTom在此列出的并行流水线方法提供了一种更复杂的方法,但您实际上会暂停,直到工作完成,这与DBMS作业技术不同。也就是说,您确实要求使用“异步”技术,而DBMS_工作正是这方面的完美选择。您确实有另一个选择,从11g开始。Oracle引入了一个包,它的功能与您想要的类似,名为DBMS_PARALLEL_EXECUTE <