Skip to content

Commit b8d3a47

Browse files
Fixes #21 - adding bad example in G-8410
1 parent 4c4454f commit b8d3a47

File tree

1 file changed

+48
-6
lines changed
  • docs/4-language-usage/8-patterns/4-ensure-single-execution-at-a-time-of-a-program-unit

1 file changed

+48
-6
lines changed

docs/4-language-usage/8-patterns/4-ensure-single-execution-at-a-time-of-a-program-unit/g-8410.md

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,52 @@ The alternative using a table where a “Lock-Row” is stored has the disadvant
1212
## Example (bad)
1313

1414
```
15+
-- create locking table
16+
CREATE TABLE application_locks (
17+
lock_name VARCHAR2(128 CHAR) NOT NULL PRIMARY KEY
18+
,lock_time TIMESTAMP NOT NULL
19+
) ORGANIZATION INDEX;
20+
-- definition
21+
CREATE OR REPLACE PACKAGE BODY lock_up IS
22+
PROCEDURE request_lock (in_lock_name IN VARCHAR2) IS
23+
PRAGMA AUTONOMOUS_TRANSACTION;
24+
BEGIN
25+
INSERT INTO application_locks (lock_name, lock_time) VALUES (in_lock_name, systimestamp);
26+
COMMIT;
27+
EXCEPTION
28+
WHEN DUP_VAL_ON_INDEX THEN
29+
RAISE err.e_lock_request_failed;
30+
END request_lock;
31+
32+
PROCEDURE release_lock (in_lock_name IN VARCHAR2) IS
33+
PRAGMA AUTONOMOUS_TRANSACTION;
34+
BEGIN
35+
DELETE FROM application_locks
36+
WHERE lock_name = in_lock_name;
37+
COMMIT;
38+
END release_lock;
39+
END lock_up;
40+
/
41+
-- call
42+
DECLARE
43+
co_lock_name CONSTANT VARCHAR2(30 CHAR) := 'APPLICATION_LOCK';
44+
BEGIN
45+
lock_up.request_lock(in_lock_name => co_lock_name);
46+
-- processing
47+
lock_up.release_lock(in_lock_name => co_lock_name);
48+
EXCEPTION
49+
WHEN OTHERS THEN
50+
-- log error
51+
lock_up.release_lock(in_lock_name => co_lock_name);
52+
RAISE;
53+
END;
54+
/
55+
```
56+
57+
## Example (good)
58+
59+
```
60+
-- definition
1561
CREATE OR REPLACE PACKAGE BODY lock_up IS
1662
FUNCTION request_lock (in_lock_name IN VARCHAR2
1763
,in_release_on_commit IN BOOLEAN := FALSE) RETURN VARCHAR2 IS
@@ -40,11 +86,7 @@ CREATE OR REPLACE PACKAGE BODY lock_up IS
4086
END release_lock;
4187
END lock_up;
4288
/
43-
```
44-
45-
## Example (good)
46-
47-
```
89+
-- call
4890
DECLARE
4991
l_handle VARCHAR2(128 CHAR);
5092
co_lock_name CONSTANT VARCHAR2(30 CHAR) := 'APPLICATION_LOCK';
@@ -59,4 +101,4 @@ EXCEPTION
59101
RAISE;
60102
END;
61103
/
62-
```
104+
```

0 commit comments

Comments
 (0)