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

时间: 2024-10-11 06:16:03

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

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

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源复制,一个slave可以有多个master,分别从各自的master复制不同的DB. 这个特性可以用在OLAP环境中,传统电商DB都是拆了再拆,分库分表,sharding,而OLAP环境或者大数据平台环境,通常需要各种数据的聚合,多个平台多个DB数据的复合查询,而这些数据分散在各个库中,怎么办了,当

Oracle 11g不同情形下的登录分析

对于Oracle初学者,甚至有些经验的Oracle DBA来说,Oracle的账户登录问题往往非常棘手,即便成功登录oracle也是知其然而不知其所以然.作者经过系统学习和反复实践,本着打破砂锅问到底的态度,总算对Oracle的登录原理与操作细节有了较全面的认识.本文记录下这些体会与经验,希望能帮助Oracle初学者自信地顺利登录oracle. 1 学习本文的先决条件 Oracle相关的知识很多,但一些基本的术语是所有dba都应该熟悉的.为更好的理解本文内容,读者需要理解如下术语: Instan

软件工程结队项目——智能点餐系统典型用户及用户场景分析

一.典型用户分析:一个典型用户描述了一组用户的典型技巧.能力.需要.想法.工作习惯和工作环境. 1.买家典型用户分析: 名字 小郭(石家庄铁道大学交1202-5班) 性别.年龄 男,22岁 联系方式 18330108270 职业 学生 收入 暂无 知识层次和能力 大学在读,会使用各种手机APP软件 生活/工作情况 上课,吃饭,睡觉,偶尔打打游戏,经常在学校门口买饭 动机,目的,困难 很喜欢吃学校门口小吃摊的炒饼,困难:中午3,4节有课时,下课都排队买饭,等的时间太长. 用户偏好 睡觉,打球 用户

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

Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; select * from all_jobs; select * from user_jobs; -- 查询字段描述 /* 字段(列) 类型 描述 JOB NUMBER 任务的唯一标示号 LOG_USER VARCHAR2(30) 提交任务的用户 P

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

原文:Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; select * from all_jobs; select * from user_jobs; -- 查询字段描述 /* 字段(列) 类型 描述 JOB NUMBER 任务的唯一标示号 LOG_USER VARCHAR2(30) 提交任务的用

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)

胜败兵家事不期,包羞忍耻是男儿--斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习scala的一些特性后,深深被scala函数式和面向对象的风格所折服,不得不赞美设计这门语言的设计者.小象大学阶段在使用MATLAB做数据分析和自动化设计时,就非常喜欢使用MATLAB的命令行和面向矩阵运算的风格编写分析代码:喜欢使用java编写层次化和清晰的模块接口,而这些Scala语言设计中都有

Oracle中的存储过程

 pl/sql编程语言是Oracle中操作数据库最快的语言,而存储过程本质就是pl/sql,所以通过存储过程来对数据库进行CRUD是最有效的. 不再使用JDBC来进行CRUD操作,因为使用JDBC来进行CRUD操作效率低. 所以,Java通过调用存储过程,来间接调用pl/sql,达到对数据库的CRUD操作. 我们可以把CRUD操作封装到存储过程中,在程序中,调用存储过程即可. 以下是例子:来自于Oracle讲师赵强 --打印Hello World /* 调用存储过程 1. exec sayH

典型用户及用户场景分析

典型用户及用户场景分析 糖糖---一个热爱编程的准程序员 名字 糖糖 性别.年龄 男,刚21岁 收入 暂时还没有 比例和重要性 市场比例很大,很重要 典型场景 写了一段自认为很优秀的代码,想要保存在一个合适的地方 使用本软件/服务的环境 需要保存自己的代码 生活/工作情况 现在还是学生,努力学习 知识层次和能力 大学还未毕业,学习热情极高,编程能力较好 用户的动机.目的和困难 保存代码,但是没有合适的地方 用户的偏好 喜欢给代码增加自定义的标签 呆呆---热爱思考人生的缺乏编程联系的“小学生”