------------------------------------------------------------
PROCEDURE release_lock (p_retval OUT INTEGER)
IS
BEGIN
IF v_lockhandle IS NOT NULL
THEN
p_retval := DBMS_LOCK.release (v_lockhandle);
END IF;
END release_lock;
------------------------------------------------------------
FUNCTION see_handle
RETURN VARCHAR2
IS
BEGIN
IF v_lockhandle IS NOT NULL
THEN
RETURN v_lockhandle;
ELSE
RETURN 'Not Allocated';
END IF;
END see_handle;
------------------------------------------------------------
FUNCTION decode_req (p_result PLS_INTEGER)
RETURN VARCHAR2
IS
retval VARCHAR2 (20);
BEGIN
SELECT DECODE (p_result, 0, 'Success', 1, 'Timeout', 2, 'Deadlock',
3, 'Parameter Error', 4, 'Already owned', 5, 'Illegal Lock Handle')
INTO retval
FROM DUAL;
RETURN retval;
END decode_req;
------------------------------------------------------------
FUNCTION decode_rel (p_result PLS_INTEGER)
RETURN VARCHAR2
IS
retval VARCHAR2 (20);
BEGIN
SELECT DECODE (p_result, 0, 3, 'Parameter Error', 4, 'Already owned', 5, 'Illegal Lock Handle')
INTO retval FROM DUAL;
RETURN retval;
END decode_rel;
------------------------------------------------------------
END lock_demo;
/
4、小结
a、从上面的测试可知,对于使用dbms_lock手动分配的锁,只能在同一session释放。
b、使用dbms_lock显示锁管理与隐式锁管理能够实现相同的功能。