在调用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 之后释放?
您的问题基于错误的猜测,即ALLOCATE_UNIQUE
建立了锁。事实上,除了保存名称-值对、锁名 => 锁句柄(并且它应用内部提交,所以不要在事务中间使用它(之外,此过程什么都不做。
要建立锁定,您应该使用DBMS_LOCK.REQUEST
功能。它具有名为 release_on_commit
的参数,因此这两种情况都是可行的:锁定可以在语句 3 或语句 5 释放,具体取决于请求模式。