DBMS_LOCK.ALLOCATE_UNIQUE锁定释放

时间:2018-01-22 13:27:11

标签: oracle

在存储过程内调用DBMS_LOCK.ALLOCATE_UNIQUE和DBMS_LOCK.RELEASE之间,如果存储过程中存在中间COMMIT,则在存在COMMIT的语句中释放Lock吗?

1. SELECT QUERY
2. DBMS_LOCK.ALLOCATE_UNIQUE
...
3. COMMIT
4. BEGIN CURSOR
...
5. DBMS_LOCK.RELEASE

声明3之后或5之后会发布锁定吗?

1 个答案:

答案 0 :(得分:3)

您的问题基于错误猜测,ALLOCATE_UNIQUE确定了锁定。在清醒的事实中,除了保存名称 - 值对,锁定名称=>之外,此过程不执行任何操作。锁定句柄(它应用内部提交,因此不要在事务中使用它。)

要建立锁定,您应该使用DBMS_LOCK.REQUEST功能。它有一个名为release_on_commit的参数,因此两种情况都是可行的:锁定可以在语句3或语句5处释放,取决于请求模式。