Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例
《Oracle dbms_lock.sleep()存储过程使用技巧》-场景-分析-实例
摘要:今天是2014年3月10日,北京,雾霾,下午组织相关部门开会。会议的结尾一名开发工程师找到了我,向我请教了一下“如何延迟SQL语句的执行时间”为了是测试项目的一个功能输出。在我的建议下使用了dbms_lock.sleep()存储过程来完成了这个实现。我在会议之后体会到Oracle的package的应用场景非常重要。往往新入职场的DBA技术不错,会的东西也不少,就是不太了解什么技术应用在什么场景下,使之发挥最大的作用来帮助我们。今天借此机会来给大家分享一下dbms_lock.sleep()存储过程使用技巧。
场景:
1:存储过程中想实现延迟10分钟再继续执行
2:应用中判断条件如果在“同步”就需要等待5分钟,如果“完成”就可以无需等待
3:测试功能反馈是否正常,我们需要延迟3分钟得到SQL语句的结果和不延迟得到的SQL语句结果是否一致
dbms_lock包:
1.这个package是Oracle提供的一个锁管理服务包,它具有创建一个锁,请求锁的状态,释放一个锁资源等功能。一般使用dbca创建的数据库默认就有这个包,如果是手工建库的话需要执行$ORACLE_HOME/rdbms/admin/dbmslock.sql这个脚本来创建这个package。创建之后数据库中才能有这个包对象。
注意:只有授予执行权限才能使用
使用SYS用户授予权限
grant execute on dbms_lock to USERNAME;
2.查看dbms_lock包内容
SQL> desc dbms_lock
Element Type
--------------- ---------
NL_MODE CONSTANT
SS_MODE CONSTANT
SX_MODE CONSTANT
S_MODE CONSTANT
SSX_MODE CONSTANT
X_MODE CONSTANT
MAXWAIT CONSTANT
ALLOCATE_UNIQUE PROCEDURE 给锁分配一个唯一的标识符
REQUEST FUNCTION 请求一个锁的模式(获取锁的状态值)
CONVERT FUNCTION 将锁从一个状态转换成另一个状态
RELEASE FUNCTION 释放锁
SLEEP PROCEDURE 这是实现延迟时间的存储过程,可以指定睡眠时间间隔
本文章主要讲解SLEEPPROCEDURE。
DBMS_LOCK.SLEEP()存储过程:
作用:使用这个存储过程可以中止会话一段时间
语法:DBMS_LOCK.SLEEP(seconds IN NUMBER);单位为“秒”,最小的增量可以百分之一秒
例如:DBMS_LOCK.SLEEP(1.95);是一个合法的值
Example:
(1)由于是一个存储过程可以直接使用
SQL> executedbms_lock.sleep(60);
PL/SQL procedure successfullycompleted
SQL> select * frompb_tradeinfo where rownum<=3;
IID TRADEID NAME CERTTYPE
------------------------------------------ ----------------------------------
382 548 一次性还款 0
415 563 测试一次性贷款 2
423 569 测试 1
(2)PL/SQL块实现延迟60秒
SQL> begin
2 dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
3 dbms_lock.sleep(60);
4 dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
5 end;
6 /
2014-03-1020:41:56
2014-03-1020:42:56
PL/SQL procedure successfullycompleted
(3)打印间隔5秒时间列表
创建测试表
SQL> create tableleonarding (iid number,appendtime date);
Table created
开始测试
SQL> begin
2 for i in 1..10
3 loop
4 insert into leonarding values(i,sysdate);
5 commit;
6 dbms_lock.sleep(5);
7 end loop;
8 end;
9 /
PL/SQL procedure successfullycompleted
打印列表
SQL> select * fromleonarding;
IID APPENDTIME
------------------------------------------------------------
1 2014-3-10 20:51:20
2 2014-3-10 20:51:25
3 2014-3-10 20:51:30
4 2014-3-10 20:51:35
5 2014-3-10 20:51:40
6 2014-3-10 20:51:45
7 2014-3-10 20:51:50
8 2014-3-10 20:51:55
9 2014-3-10 20:52:00
10 2014-3-10 20:52:05
10 rows selected
小结:dbms_lock.sleep()过程我们在使用的时候请注意第一是权限要授予,第二是使用的场景,第三注意单位。
dbms sleep 延迟 package leonarding
Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例的更多相关文章
- 数据治理中Oracle SQL和存储过程的数据血缘分析
数据治理中Oracle SQL和存储过程的数据血缘分析 数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...
- 理解 python metaclass使用技巧与应用场景分析
理解python metaclass使用技巧与应用场景分析 参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...
- Dapper完美兼容Oracle,执行存储过程,并返回结果集。
Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...
- Oracle job procedure 存储过程定时任务
Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...
- mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法
mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源 ...
- 【转】Oracle job procedure 存储过程定时任务
原文:Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相 ...
- Oracle job procedure 存储过程定时任务(转自hoojo)
Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
随机推荐
- iOS开发中乱用hook可能导致灾难
今天有同事遇到问题,他重写viewDidAppear:方法,但是,代码并没有执行到.后来我发现,是另个一同事用了黑魔法搞的鬼,而且他本人并不知道这么做会产生影响.(本文中所有黑魔法指Swizzle) ...
- The report for triangle problem
本次实验主要使用eclipse 编写三角形判定的代码,并用junit进行测试. 1.安装junit和hamcrest 下载junit-4.12.jar和hamcrest-all-1.3.jar 并且拖 ...
- UIMenuController使用
- (void)bubbleDidLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { if(gestureRecognizer. ...
- [BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统
[BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统 试题描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录 ...
- JavaScript获取onclick、onchange等事件值的代码
这里主要是用到了getAttributeNode()这个方法,它获取的是属性节点,忽略属性和事件的差别,具体示例如下,感兴趣的朋友可以参考下哈希望对大家有所帮助 今天小菜处理下拉菜单级联问题时,想获取 ...
- MyEclipse自带maven找不到或自己外置安装
我用的MyEclipse2015 stable2.0版本. 1.删除相关SoftwareHelp --> choose components --> 进入后点 已安装的maven选项. 由 ...
- 2016年11月17日--SQL主、外键,子查询
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...
- HDU 2222 ----AC自动机
Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...
- django 的文件上传
template html(模板文件): <form enctype="multipart/form-data" method="POST" action ...
- 怎样搭建PHP开发环境
搭建PHP开发环境首先第一步要 下载开发环境 wampserver 下载sublime text 2 sublime使用技巧 1:安装漂亮的编程字体http://pan.baidu.com/s/1xM ...