DECLAREvar_handle1 VARCHAR2(128);var_output INTEGER;BEGINdbms_lock.allocate_unique('USER_LOCK_TEST', var_handle1);--分配锁var_output := dbms_lock.request(var_handle1, 6, 32767, FALSE);--请求独占锁dbms_output.put_line(var_handle1);--返回锁句柄dbms_output.put_line(var_output);--返回状态,0表示成功申请END;
——2.新开一个窗口,继续执行
DECLAREvar_handle1 VARCHAR2(128);var_output INTEGER;BEGINdbms_lock.allocate_unique('USER_LOCK_TEST', var_handle1);--分配锁var_output := dbms_lock.request(var_handle1, 6, 32767, FALSE);--请求独占锁dbms_output.put_line(var_handle1);--返回锁句柄dbms_output.put_line(var_output);--返回状态,0表示成功申请END;
结果会一直等待,无法获取锁
——3.新开一个窗口,释放锁,但是无法释放,因为UL锁特性是,谁申请,谁释放
将release代码在第一个窗口执行,成功执行
DECLAREl_lock_handle INTEGER;BEGINl_lock_handle := dbms_lock.release('123456789');--123456789锁句柄 通过dbms_lock.allocate_unique('USER_LOCK_TEST', var_handle1)的var_handle1获取dbms_output.put_line(l_lock_handle);END;
——4.有关UL锁查询
select lockid ,dl.name from SYS.dbms_lock_allocated dl where dl.name = 'USER_LOCK_TEST';SELECT d.session_id,d.lock_id1--对应dbms_lock_allocated.lockidFROM sys.dba_lock dWHERE d.lock_type = 'PL/SQL User Lock'AND d.blocking_others = 'Blocking';
文章转载自云贝教育,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




