现在我们有3个存储过程,分别是p1,p2,p3

如果按下列方式执行

beginp1;p2;p3;
end;

它们是串行的。

我们可以使用DBMS_SCHEDULER包来间接实现并行执行,具体用法如下:

begindbms_scheduler.create_job(job_name   => dbms_scheduler.generate_job_name,job_type   => 'PLSQL_BLOCK',job_action => 'begin p1; end;',start_date => sysdate,enabled    => true,comments   => 'temporary job,will be delete soon after complete!',auto_drop  => true);dbms_scheduler.create_job(job_name   => dbms_scheduler.generate_job_name,job_type   => 'PLSQL_BLOCK',job_action => 'begin p2; end;',start_date => sysdate,enabled    => true,comments   => 'temporary job,will be delete soon after complete!',auto_drop  => true);                            dbms_scheduler.create_job(job_name   => dbms_scheduler.generate_job_name,job_type   => 'PLSQL_BLOCK',job_action => 'begin p3; end;',start_date => sysdate,enabled    => true,comments   => 'temporary job,will be delete soon after complete!',auto_drop  => true);
end;

使用create_job来创建并立即执行一个job,执行完之后系统会自动删除。其中:

dbms_scheduler.generate_job_name 用来创建一个job_name,默认是JOB$_加上一个递增的数字,形如 JOB$_7983

start_time => sysdate 表示立即执行(需要同时将enabled设置为true)

enabled => true 只有这样才会立即执行

auto_drop => true 表示执行完自动删除

由于我们没有指定任何重复执行的参数,所以job创建后,它的SCHEDULE_TYPE=ONCE,而不是一般的CALENDAR。

可以通过

select * from user_scheduler_jobs;

查看。

在我的工作中遇到这么一个实际需求,伪代码如下:

begin
for rows in (select COL1 from tab) loop业务逻辑处理;
end loop;
end;

处理逻辑部分比较简单,但是循环次数比较多,所以考虑将数据分片执行。

beginfor rows in (select col1from (select mod(rownum, v_parallel_degree) + 1 part,--part要加1,因为是取余col1from (select col1 from tab order by col2))where part = v_part) loopend loop;
end;其中:v_parallel_degree:分片的数量v_part:用来取第x分片

将以上代码放到存储过程中,两个入参:v_parallel_degree,v_part

最后使用一个存储过程来调用

--***************************创建一个工具包用来创建job***************************create or replace package pkg_utils isprocedure exec_pkg(v_pkg_name in varchar2);--并行执行存储过程procedure exec_proc_parallel(v_procedure_name  in varchar2,v_parallel_degree in int);end pkg_utils;/
create or replace package body pkg_utils is--并行执行存储过程procedure exec_proc_parallel(v_procedure_name  in varchar2,v_parallel_degree in int) isbeginfor i in 1 .. v_parallel_degree loopdbms_scheduler.create_job(job_name   => dbms_scheduler.generate_job_name,job_type   => 'PLSQL_BLOCK',job_action => 'begin ' || v_procedure_name || '(' ||v_parallel_degree || ',' || i ||'); end;',start_date => sysdate,enabled    => true,comments   => v_procedure_name || '(' || i ||' of ' || v_parallel_degree || ')',auto_drop  => true);end loop;end exec_proc_parallel;begin-- initializationnull;
end pkg_utils;
/--***************************调用实例***************************
beginpkg_utils.exec_proc_parallel('PROCEDURE_NAME', 16);
end;
/

Oracle11gR2 并行执行存储过程相关推荐

  1. greenplum 存储过程_揭秘!Greenplum并行执行引擎到底是如何工作的?

    <深入浅出Greenplum内核>系列直播以每月一场的速度持续推出中.在第一场<架构解读>直播里,我们了解了Greenplum的整体架构.存储管理.索引.查询执行.事务与日志等 ...

  2. Sql Server实用操作-存储过程精解

    CREATE PROCEDURE 创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合.可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过 ...

  3. mysql存储过程并行_Mysql存储过程的执行顺序问题

    Mysql存储过程的执行顺序问题 SQL code: CREATE TABLE `t_a` ( `a_id` int(11) NOT NULL AUTO_INCREMENT, `a_name` var ...

  4. linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步

    需求背景:与第三方厂商合作使用sql_loadv1.0进行数据加载,他们负责推数,我拉数. 执行流程: 1.ODS推数-------->sftp服务器 2.拉数-------->sftp服 ...

  5. 存储过程,触发器,Mysql权限,备份还原

    一.存储过程(优点:执行快:缺点:移植性差) 1.创建存储过程: DELIMITER $ CREATE PROCEDURE pro_test(); BEGIN --可以写多个sql END $; 调用 ...

  6. sql存储过程完全教程

    sql存储过程完全教程 目录 1.sql存储过程概述 2.SQL存储过程创建E2C~,x0@iC|4W7c*H 3.sql存储过程及应用)z,e1A{3o 4.各种存储过程使用指南A~k?/L cS` ...

  7. MS SQL存储过程

    更强的安全性 多个用户和客户端程序可以通过过程对基础数据库对象执行操作,即使用户和程序对这些基础对象没有直接权限. 过程控制执行哪些进程和活动,并且保护基础数据库对象. 这消除在了单独的对象级别授予权 ...

  8. SQLserve数据库存储过程

    存储过程 能够快速简便的实现某种功能, 系统存储过程:由数据库管理器创建,实现对数据库管理器.数据库对象的操作,以sp_开头 扩展存储过程 允许使用其他编程语言创建外部存储过程,以xp_ 用户存储过程 ...

  9. SAP HANA中调试存储过程

    对于使用SQLScript 的存储过程,SAP HANA提供了对存储过程的调试功能,即debug功能.当对一个存储过程进行调试时,这个存储过程中的代码将被顺序执行,而并不是按照实际的可能情况并行执行. ...

最新文章

  1. OpenCV 新版 4.5.1 发布!
  2. 【干货】如何引导免费用户成为付费用户
  3. win32应用程序创建流程
  4. vue-cli部署ngixs_Vue-cli项目部署到Nginx
  5. 为什么有的人喜欢夜间工作_为什么开发人员喜欢在夜间编码
  6. 服务器为什么要装操作系统,服务器需要安装操作系统吗
  7. 京东联盟API-二合一链接转链接口-线报转链-京粉转链接口
  8. 如何自己开发FreeCAD的宏插件
  9. 支付宝手机网站支付,错误代码 insufficient-isv-permissions 错误原因: ISV权限不足
  10. 图书馆图书借阅登记微信小程序开发制作管理软件系统
  11. WPS-Word : 页首的段落段前间距失效/不起作用/无效,段前一行无效没反应
  12. sublime 前端css 插件
  13. mac软件拖到dock,重启后显示问号?,的解决方法
  14. JDOM和XPATH薛谷雨
  15. oracle控制服务台,管理控制台服务
  16. 计算机网络应用技术技能大赛
  17. encodeURIComponent()有什么用?
  18. 睡袋检测标准要求介绍
  19. 银联开放平台在线课堂,上线啦
  20. 计算机个性化桌面图片,从电脑桌面图片看工作个性

热门文章

  1. 挥动奥卡姆的剃刀:“学霸”GPT-4,超越人工的智能答案有多少可信度?
  2. 51单片机控制智能家居监控系统设计仿真
  3. pr cpu100%_6款超酷炫又小众的PR插件 据说都用过就是大神!
  4. 《智能仪器仪表设计基础》20160621
  5. 部署vue项目到阿里云服务器
  6. Mybatis逆向工程_使用maven
  7. android 浏览器夜间模式
  8. 电子科技大学计算机硕士平均薪水,心酸!电子科大硕士码农晒出月工资,到手才1.3万,还不如去北京...
  9. libvirt php,libvirt虚拟化开发简介
  10. 二维计算机动画基础,二维计算机动画制作新技术相关探讨