oracle存储过程如何并行?
举例:一个存储过程A,在A里面并行执行A1,A2,A3,如:createorreplaceprocedureAisbeginA1;A2;A3;A4;...endA;现在这...
举例:
一个存储过程A,在A里面并行执行A1,A2,A3,如:
create or replace procedure A is
begin
A1;
A2;
A3;
A4;
...
end A;
现在这种写法只能串行的执行,效率低,有没有一个办法在执行A的时候 ,A1,A2,A3...都同时执行??
在网上看了 用job 可以做到, 具体怎么做?求大神解答。
我在A里面查询出数据 作为参数 分别放入 A1,A2,A3,因为他们在A里面都是独立的,所以想把他们并行 展开
一个存储过程A,在A里面并行执行A1,A2,A3,如:
create or replace procedure A is
begin
A1;
A2;
A3;
A4;
...
end A;
现在这种写法只能串行的执行,效率低,有没有一个办法在执行A的时候 ,A1,A2,A3...都同时执行??
在网上看了 用job 可以做到, 具体怎么做?求大神解答。
我在A里面查询出数据 作为参数 分别放入 A1,A2,A3,因为他们在A里面都是独立的,所以想把他们并行 展开
4个回答
展开全部
A1 A2 A3也是存储过程吗? job其实上也只是分别调用这几个过程来执行,而不是靠执行一个A就可以让所有A1 2 3 4 并行执行的。 如果A1 2 3 4都是需要参数的话,那么你也只有用A分开给每一个都传递参数,否则的话也是不能并行执行的。 例如:
declare n number
begin
dbms_job.submit('a1;a2;a3;a4',sysdate,'trunc(sysdate+1)');
commit;
end;
/
这样会让a1 2 3 4分别同时执行,你可以做一个改动就是让a给a*传递参数的动作 直接加入到a 1 2 3 4的过程当中才可以。
declare n number
begin
dbms_job.submit('a1;a2;a3;a4',sysdate,'trunc(sysdate+1)');
commit;
end;
/
这样会让a1 2 3 4分别同时执行,你可以做一个改动就是让a给a*传递参数的动作 直接加入到a 1 2 3 4的过程当中才可以。
更多追问追答
追问
CREATE PROCEDURE A {
FOR W INTO E
A1 (E);
A2 (E);
A3 (E);
END LOOP
END A;
整体结构是这样的 ,你这里面的这个时间是做什么用的?
你这样写能否每次都接收我遍历传入的参数呢?
我希望 A1 A2 A3并行跑完后执行下次循环继续跑
追答
因为你是要用A这个过程给A1 2 3传递参数,但是又需要这些过程同时执行,用循环肯定就把他们包装成同一个PL/SQL 包了,就不能实现同时执行, 你只需要把A传递给A1 2 3改成 AA1传递给A1; AA2传递给A2 AA3 传递给A3 ; AA*这个只是一个命名而已
CREATE PROCEDURE AA1 {
FOR W INTO E
A1 (E);
END AA1;
...
CREATE PROCEDURE AA2 {
FOR W INTO E
A2 (E);
END AA2;
也就是说没有办法之用一个过程来并行执行其他过程,只可能是顺序的,job也只是把要执行的过程都列出来,仅此而已。
网易云信
2023-12-06 广告
2023-12-06 广告
网易云信提供一站式的 1 对 1 UIKit 组件库,可以更快地搭建 1 对 1 社交平台,能够快速实现音视频呼叫、音视频通话、1对1消息发送、美颜和礼物功能,直接可以复用我们的组件源码就可以了。优势:1、全套1对1 UI组件,接入更快;2...
点击进入详情页
本回答由网易云信提供
展开全部
是可以通过JOB实现,其实就是建一个立即执行不循环的JOB例子如下:
CREATE OR REPLACE PROCEDURE A IS
V_JOB INTEGER;
BEGIN
EXECUTE IMMEDIATE 'DBMS_JOB.SUBMIT(JOB => V_JOB,
WHAT => ''A1('||参数||');'',
NEXT_DATE => SYSDATE,
INTERVAL => NULL)';
...
END A;
CREATE OR REPLACE PROCEDURE A IS
V_JOB INTEGER;
BEGIN
EXECUTE IMMEDIATE 'DBMS_JOB.SUBMIT(JOB => V_JOB,
WHAT => ''A1('||参数||');'',
NEXT_DATE => SYSDATE,
INTERVAL => NULL)';
...
END A;
追问
A1,A2,A3 都要,请问在参数那块怎么写,我的整体要求在楼下追问里说出来了,麻烦看下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
v_job number;
sys.dbms_job.submit(v_job,'A1') ; --立即执行
sys.dbms_job.submit(v_job,'A2',sysdate+5/24/60) ; --5分钟后执行
sys.dbms_job.submit(v_job,'A3',sysdate+1/24/60) ; --1分钟后执行
....
sys.dbms_job.submit(v_job,'A1') ; --立即执行
sys.dbms_job.submit(v_job,'A2',sysdate+5/24/60) ; --5分钟后执行
sys.dbms_job.submit(v_job,'A3',sysdate+1/24/60) ; --1分钟后执行
....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以DEBUG一下,如果是用PLSQLDEVELOPER的话,可以设断点在可能比较慢的地方用F9跟进去。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询