oracle循环延时,请教oracle pl/sql中延时语句的写法

本文介绍了Oracle PL/SQL中如何使用DBMS_LOCK包进行锁的分配、请求、转换和释放,以及如何利用SLEEP过程实现延时。通过示例展示了如何在存储过程中安全地管理锁,确保资源的正确同步和避免死锁。
摘要由CSDN通过智能技术生成

这个包的使用简单研究了一下,是这样:

名称        类型        描述

ALLOCATE_UNIQUE        Procedure        创建锁(如果此锁尚未建立)或者获得锁的标识符(如果此锁已经建立).

REQUEST        Function        请求锁.

CONVERT        Function        转换锁的状态.

RELEASE         Function        释放锁.

SLEEP         Procedure        让一个存储过程睡上指定的时间.

使用的大概方式是这样的:

1 先用ALLOCATE_UNIQUE建立新锁,并获得锁的标识符,如果锁已经存在,直接得到标识符。

2 通过锁的标识符,用REQUEST方法对锁发出请求,会获得状态值,可以通过这个状态值判定锁的状态,如锁是否可用、是否正在被其他会话使用等,以此来决定程序如何运行。

3 当存储过程结束时,用RELEASE方法显示的将锁释放掉。

下面展示了一下基本的使用:

declare

v_result number;

v_lockhandle varchar2(128);

begin

--allocate a lock named "foo_lock",and get identifier

dbms_lock.allocate_unique('foo_lock', v_lockhandle);

--request for this lock,then get request result

v_result:=dbms_lock.request(v_lockhandle,6,10,true);

if(v_result = 0) then

--have gain the lock successfully,then some operation can startup

--.......

--some operation here

--.......

--release the lock after operation has been finished

v_result:=dbms_lock.release(v_lockhandle);

else

--not get the lock,print out the reason

dbms_output.put_line(case when v_result=0 then 'Lock allocated'

when v_result=1 then 'Timeout'

when v_result=2 then 'Deadlock'

when v_result=3 then 'Parameter Error'

when v_result=4 then 'Already owned'

when v_result=5 then 'Illegal Lock Handle'

end);

end if;

end;

/

一个会话(Session)获得一个锁之后,应该显式的用RELEASE将其释放,否则其他会话将不能继续使用,其他会话调用REQUEST方法时,如果没有设置TimeOut参数,将一直等待下去,直到拥有锁的会话释放掉锁或者断掉,它才能获得此锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值