[Home] [Help]
PACKAGE BODY: APPS.AD_LOCK_UTILS_PKG
Source
1 PACKAGE BODY Ad_Lock_Utils_Pkg AS
2 -- $Header: adlckutlb.pls 115.3 2004/09/17 07:38:49 msailoz noship $
3
4 g_LockName varchar2(128);
5 g_LockHandle varchar2(128);
6
7 PDML_LOCK_NAME CONSTANT VARCHAR2(30) := 'AD_PARALLEL';
8
9 --
10 -- Procedure Allocate_Handle
11 --
12 -- Allocates lockhandle for a given lock
13 --
14 -- This is defined as an autonomous transaction as DBMS_LOCK.Allocate_Unique does an implicit
15 -- commit
16 --
17 PROCEDURE Allocate_Handle(
18 p_LockName IN VARCHAR2 ,
19 x_LockHandle OUT NOCOPY VARCHAR2 )
20 IS
21 PRAGMA AUTONOMOUS_TRANSACTION ;
22 l_LockHandle VARCHAR2(128);
23 BEGIN
24 DBMS_LOCK.ALLOCATE_UNIQUE(
25 lockname => p_LockName,
26 lockhandle => l_LockHandle);
27 x_LockHandle := l_LockHandle;
28
29 COMMIT ;
30 END Allocate_Handle ;
31
32 PROCEDURE Get_Lock(
33 p_LockName IN VARCHAR2 ,
34 p_LockMode IN VARCHAR2 ,
35 p_Release_On_Commit IN BOOLEAN,
36 x_LockHandle IN OUT NOCOPY VARCHAR2 )
37 IS
38 l_reqid number;
39 BEGIN
40
41 IF (g_LockName = p_LockName) THEN
42 x_LockHandle := g_LockHandle;
43 ELSE
44 Allocate_Handle(p_LockName, x_LockHandle);
45 g_LockHandle := x_LockHandle;
46 g_LockName := p_LockName;
47 END IF;
48
49 l_reqid := dbms_lock.request(lockhandle=>x_LockHandle,
50 lockmode=>p_LockMode,
51 timeout=>dbms_lock.maxwait,
52 release_on_commit=>p_Release_On_Commit);
53
54 IF (l_reqid <> 0) THEN
55 raise_application_error(-20001,
56 'dbms_lock.request('|| g_LockHandle ||
57 ', ' || p_LockMode ||
58 ', ' || dbms_lock.maxwait ||
59 ') returned : ' || l_reqid);
60 END IF;
61 END;
62
63 PROCEDURE Get_Lock(
64 p_LockName IN VARCHAR2 ,
65 p_LockMode IN VARCHAR2 ,
66 p_Release_On_Commit IN BOOLEAN)
67 IS
68 l_LockHandle varchar2(128);
69 BEGIN
70
71 l_LockHandle := NULL;
72
73 ad_lock_utils_pkg.Get_Lock(
74 p_LockName=>p_LockName,
75 p_LockMode=>p_LockMode,
76 p_Release_On_Commit=>p_Release_On_Commit,
77 x_LockHandle=>l_LockHandle);
78 END;
79
80 PROCEDURE Release_Lock(
81 p_LockHandle IN VARCHAR2 )
82 IS
83 l_LockStatus number;
84 BEGIN
85
86 l_LockStatus := DBMS_LOCK.RELEASE(
87 lockhandle => p_LockHandle);
88
89 IF (l_LockStatus <> 0) THEN
90 raise_application_error(-20001, 'DBMS_LOCK.release() returned '||l_LockStatus);
91 END IF;
92 END;
93
94 PROCEDURE Release_Lock(p_LockName IN VARCHAR2)
95 IS
96 l_LockHandle varchar2(128);
97 BEGIN
98
99 IF (g_LockName = p_LockName) THEN
100 l_LockHandle := g_LockHandle;
101 ELSE
102 Allocate_Handle(p_LockName, l_LockHandle);
103 g_LockHandle := l_LockHandle;
104 g_LockName := p_LockName;
105 END IF;
106
107 Release_Lock(p_LockHandle=>l_LockHandle);
108 END;
109
110 PROCEDURE Acquire_PDML_Lock
111 IS
112 BEGIN
113 Get_Lock(p_LockName=>PDML_LOCK_NAME,
114 p_LockMode=>DBMS_LOCK.X_MODE,
115 p_Release_On_Commit=>FALSE);
116 END;
117
118 PROCEDURE Release_PDML_Lock
119 IS
120 BEGIN
121 Release_Lock( p_LockName=>PDML_LOCK_NAME);
122
123 END;
124
125 BEGIN
126 g_LockName := '##UNKNOWN##';
127 g_LockHandle := '##UNKNOWN##';
128 END Ad_Lock_Utils_Pkg;