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里面都是独立的,所以想把他们并行
展开
 我来答
包飞风7B
2011-08-31 · TA获得超过1840个赞
知道小有建树答主
回答量:368
采纳率:100%
帮助的人:219万
展开全部
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的过程当中才可以。
更多追问追答
追问
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 广告
网易云信提供一站式的 1 对 1 UIKit 组件库,可以更快地搭建 1 对 1 社交平台,能够快速实现音视频呼叫、音视频通话、1对1消息发送、美颜和礼物功能,直接可以复用我们的组件源码就可以了。优势:1、全套1对1 UI组件,接入更快;2... 点击进入详情页
本回答由网易云信提供
仗剑折花
2011-08-31 · TA获得超过127个赞
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:96.5万
展开全部
是可以通过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;
追问
A1,A2,A3  都要,请问在参数那块怎么写,我的整体要求在楼下追问里说出来了,麻烦看下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjzhy1001
2011-08-31
知道答主
回答量:16
采纳率:0%
帮助的人:9.6万
展开全部
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分钟后执行
....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户24078
2011-08-31 · TA获得超过159个赞
知道答主
回答量:157
采纳率:0%
帮助的人:103万
展开全部
可以DEBUG一下,如果是用PLSQLDEVELOPER的话,可以设断点在可能比较慢的地方用F9跟进去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式