Oracle11gR2 并行执行存储过程
现在我们有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 并行执行存储过程相关推荐
- greenplum 存储过程_揭秘!Greenplum并行执行引擎到底是如何工作的?
<深入浅出Greenplum内核>系列直播以每月一场的速度持续推出中.在第一场<架构解读>直播里,我们了解了Greenplum的整体架构.存储管理.索引.查询执行.事务与日志等 ...
- Sql Server实用操作-存储过程精解
CREATE PROCEDURE 创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合.可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过 ...
- mysql存储过程并行_Mysql存储过程的执行顺序问题
Mysql存储过程的执行顺序问题 SQL code: CREATE TABLE `t_a` ( `a_id` int(11) NOT NULL AUTO_INCREMENT, `a_name` var ...
- linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步
需求背景:与第三方厂商合作使用sql_loadv1.0进行数据加载,他们负责推数,我拉数. 执行流程: 1.ODS推数-------->sftp服务器 2.拉数-------->sftp服 ...
- 存储过程,触发器,Mysql权限,备份还原
一.存储过程(优点:执行快:缺点:移植性差) 1.创建存储过程: DELIMITER $ CREATE PROCEDURE pro_test(); BEGIN --可以写多个sql END $; 调用 ...
- sql存储过程完全教程
sql存储过程完全教程 目录 1.sql存储过程概述 2.SQL存储过程创建E2C~,x0@iC|4W7c*H 3.sql存储过程及应用)z,e1A{3o 4.各种存储过程使用指南A~k?/L cS` ...
- MS SQL存储过程
更强的安全性 多个用户和客户端程序可以通过过程对基础数据库对象执行操作,即使用户和程序对这些基础对象没有直接权限. 过程控制执行哪些进程和活动,并且保护基础数据库对象. 这消除在了单独的对象级别授予权 ...
- SQLserve数据库存储过程
存储过程 能够快速简便的实现某种功能, 系统存储过程:由数据库管理器创建,实现对数据库管理器.数据库对象的操作,以sp_开头 扩展存储过程 允许使用其他编程语言创建外部存储过程,以xp_ 用户存储过程 ...
- SAP HANA中调试存储过程
对于使用SQLScript 的存储过程,SAP HANA提供了对存储过程的调试功能,即debug功能.当对一个存储过程进行调试时,这个存储过程中的代码将被顺序执行,而并不是按照实际的可能情况并行执行. ...
最新文章
- OpenCV 新版 4.5.1 发布!
- 【干货】如何引导免费用户成为付费用户
- win32应用程序创建流程
- vue-cli部署ngixs_Vue-cli项目部署到Nginx
- 为什么有的人喜欢夜间工作_为什么开发人员喜欢在夜间编码
- 服务器为什么要装操作系统,服务器需要安装操作系统吗
- 京东联盟API-二合一链接转链接口-线报转链-京粉转链接口
- 如何自己开发FreeCAD的宏插件
- 支付宝手机网站支付,错误代码 insufficient-isv-permissions 错误原因: ISV权限不足
- 图书馆图书借阅登记微信小程序开发制作管理软件系统
- WPS-Word : 页首的段落段前间距失效/不起作用/无效,段前一行无效没反应
- sublime 前端css 插件
- mac软件拖到dock,重启后显示问号?,的解决方法
- JDOM和XPATH薛谷雨
- oracle控制服务台,管理控制台服务
- 计算机网络应用技术技能大赛
- encodeURIComponent()有什么用?
- 睡袋检测标准要求介绍
- 银联开放平台在线课堂,上线啦
- 计算机个性化桌面图片,从电脑桌面图片看工作个性
热门文章
- 挥动奥卡姆的剃刀:“学霸”GPT-4,超越人工的智能答案有多少可信度?
- 51单片机控制智能家居监控系统设计仿真
- pr cpu100%_6款超酷炫又小众的PR插件 据说都用过就是大神!
- 《智能仪器仪表设计基础》20160621
- 部署vue项目到阿里云服务器
- Mybatis逆向工程_使用maven
- android 浏览器夜间模式
- 电子科技大学计算机硕士平均薪水,心酸!电子科大硕士码农晒出月工资,到手才1.3万,还不如去北京...
- libvirt php,libvirt虚拟化开发简介
- 二维计算机动画基础,二维计算机动画制作新技术相关探讨