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

简介:

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


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


场景:

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

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

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


dbms_lock包:

1.这个packageOracle提供的一个锁管理服务包,它具有创建一个锁,请求锁的状态,释放一个锁资源等功能。一般使用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


2PL/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



 本文转自 ztfriend 51CTO博客,原文链接:http://blog.51cto.com/leonarding/1372704,如需转载请自行联系原作者






相关文章
|
28天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
152 64
|
4月前
|
存储 Oracle 关系型数据库
关系型数据库Oracle应用场景
【7月更文挑战第5天】
145 3
|
14天前
|
存储 Oracle 关系型数据库
oracle服务器存储过程中调用http
通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
16 0
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
389 2
|
6月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
4月前
|
Oracle 关系型数据库 数据处理
|
6月前
|
SQL Oracle 前端开发
Oracle效率分析,Github标星25K+超火的前端实战项目
Oracle效率分析,Github标星25K+超火的前端实战项目
|
5月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
183 0
|
6月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
17天前
|
存储 SQL NoSQL

推荐镜像

更多