oracle 存储过程中多线程执行另一个存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 存储过程中多线程执行另一个存储过程相关的知识,希望对你有一定的参考价值。

我想在一个存储过程A中,调用另一个存储过程B,由于B是用来将某个表的数据插入到另一个表中,用游标根据年份来做的,为了节省时间就需要多线程并发执行,也就是要并发的调用存储过程B,这个sql该怎么写呢,用 execute immediate 'exec procedure B(2014);exec procedure B(2015);' 这样的方式?不知道该怎么写这个sql,求教!

参考技术A --可以参考如下:
DECLARE
CURSRO C_T IS

SELECT 年份 FROM 表名;
BEGIN
FOR C_C IN C_T LOOP

BEGIN

PROCEDURE B(C_C.年份);

END;

END LOOP;
END;追问

这样就只是循环来顺序执行而已,我要的是并发,就像在pl/sql里面开多个 command窗口,或者开多个sqlplus窗口来执行一样,我记得好像在linux的shell脚本里面有这种写法,但是忘了咋写了!

追答

shell脚本里好像是:exec PROCEDURE B(年份1) & exec PROCEDURE B(年份2) & exec PROCEDURE B(年份3)
你试试。。。

oracle中在编写存储过程启动多线程的问题?

参考技术A 使dml语句能实现真正意义上的并发。
楼主可以试验一下,一个dml语句,比如update操作,语句中加上/*+paraller(表别名,并发数)*/,看看执行计划,可以发现此处加的并发只体现在了查询上,而并未体现在更新操作上;
加上'ALTER
SESSION
ENABLE
PARALLEL
DML'之后,再查看执行计划,查询和更新都有并发了。
另外使用完'ALTER
SESSION
ENABLE
PARALLEL
DML'后,记得关闭
ALTER
SESSION
DISABLE
PARALLEL
DML

以上是关于oracle 存储过程中多线程执行另一个存储过程的主要内容,如果未能解决你的问题,请参考以下文章

oracle中在编写存储过程启动多线程的问题?

以另一个用户身份执行 Oracle 存储过程

oracle中在编写存储过程启动多线程的问题?

oracle存储过程查找表数据插入另一个表中。。

oracle 执行存储过程 无法中断 但是是循环执行 怎么办

oracle存储过程