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()存储过程使用技巧-场景-分析-实例的更多相关文章

  1. 数据治理中Oracle SQL和存储过程的数据血缘分析

    数据治理中Oracle SQL和存储过程的数据血缘分析   数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...

  2. 理解 python metaclass使用技巧与应用场景分析

    理解python metaclass使用技巧与应用场景分析       参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...

  3. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  4. Oracle job procedure 存储过程定时任务

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

  5. mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

    mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源 ...

  6. 【转】Oracle job procedure 存储过程定时任务

    原文:Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相 ...

  7. Oracle job procedure 存储过程定时任务(转自hoojo)

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

  8. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  9. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

随机推荐

  1. MFC中CString转化为char*

    char* convertCStringToChars(CString string) { int nLength=string.GetLength(); ]; memset(c,,nLength+) ...

  2. "A transport-level error has occurred when sending the request to the server,指定的网络名不在可用"的解决办法

    项目在外网服务器上运行的时候,遇到一个异常:"A transport-level error has occurred when sending the request to the ser ...

  3. 第2月第1天 命令(Command)模式

    http://www.tracefact.net/Design-Pattern/Command.aspx 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请 ...

  4. HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽 ...

  5. Linux新手应掌握的10个基本命令

    导读 Linux对我们的生活有着很大的影响.然而在Linux上,你通常应该使用终端命令,而不是只要点击启动器图像(就像你在Windows上操作那样).这10个基本的Linux命令和重要命令会帮助你尽快 ...

  6. 最简单的Android教程之自定义控件

    新建title.xml,完成布局 新建一个TitleLayout继承 LinearLayout. activity_main.xml中引用 Run your applicaiton , and try ...

  7. 取数据的前N行

    用awk中csv文件中取前1000行出来,代码虽少,很容易出错 BEGIN{ FS=","; OFS=","; i=; } { i++; )exit; prin ...

  8. (原创)android中使用相机的两种方式

    在社交类应用或扫描二维码的场合都需要用到手机上的摄像头 在程序中启用这一硬件主要有两类方法 1.发送intent启动系统自带的摄像应用 此应用的AndroidManifest中的intent-filt ...

  9. Tomcat配置文件server.xml详解

    <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOW ...

  10. jquery学习——遍历

    1.each() $(selector).each(function(index,element)) var arr = [ "a", "bb", " ...