2分六合

IT技术互动交流平台

Oracle dbms_lock.sleep()存储过程使用技巧场景分析实例

作者:leonarding1  发布日期:2014-03-12 11:40:35

《Oracle dbms_lock。sleep()存储过程使用技巧》-场景-分析-实例

 

摘要:今天是2014年3月10日,北京,雾霾,下午组织相关部门开会。会议的结尾一名开发工程师找到了我,向我请教了一下“如何延迟SQL语句的执行时间”为了是测试项目的一个功能输出。在我的建议下使用了dbms_lock.sleep()存储过程来完成了这个实现。我在会议之后体会到Oracle的package的应用场景非常重要。往往新入职场的DBA技术不错,会的东西也不少,就是不太了解什么技术应用在什么场景下,使之发挥最大的作用来帮助我们。今天借此机会来给大家分享一下dbms_lock.sleep()存储过程使用技巧。

 

场景:

1:存储过程中想实现延迟10分钟再继续执行

2:应用中判断条件如果在“同步”就需要等待5分钟,如果“完成”就可以无需等待

2分六合3:测试功能反馈是否正常,我们需要延迟3分钟得到SQL语句的结果和不延迟得到的SQL语句结果是否一致

 

dbms_lock包:

1.这个package是Oracle提供的一个锁管理服务包,它具有创建一个锁,请求锁的状态,释放一个锁资源等功能。一般使用dbca创建的数据库默认就有这个包,如果是手工建库的话需要执行$ORACLE_HOME/rdbms/admin/dbmslock.sql这个脚本来创建这个package。创建之后数据库中才能有这个包对象。

注意:只有授予执行权限才能使用

2分六合使用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()存储过程:

作用:使用这个存储过程可以中止会话一段时间

2分六合语法: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

开始测试

2分六合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;

2分六合IID APPENDTIME

------------------------------------------------------------

1 2014-3-10 20:51:20

2 2014-3-10 20:51:25

3 2014-3-10 20:51:30

2分六合4 2014-3-10 20:51:35

2分六合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

 

2分六合Leonarding 刘盛

2014。03。10

2分六合北京&spring

分享技术~成就梦想

Tag标签:         
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规