Могу ли я иметь таблицу взаимных исключений в моей базе данных (Oracle) с простым SQL? - PullRequest
0 голосов
/ 23 августа 2010

Я хотел бы иметь таблицу в моей базе данных Oracle, строки которой действуют как блокировки. В таблице будет один столбец, varchar, и мои клиенты (процессы Java через JDBC) будут выполнять операторы для получения и снятия блокировок.

Оператор получения должен проверить наличие строки с заданным значением и вставить, если ее там нет. Оператор должен как-то сигнализировать вызывающей стороне, свободна строка или нет.

Оператор release должен снять блокировку, удалив строку.

Заявление о выпуске является простым, но как должно выглядеть мое заявление о приобретении?

Ответы [ 2 ]

5 голосов
/ 23 августа 2010

Я рекомендую вам использовать DBMS_LOCK для этой цели.Под капотом он в значительной степени делает то, что вы предлагаете.

DBMS_LOCK пакет

1 голос
/ 23 августа 2010

Вы можете определить уникальный индекс первичного ключа для имени замка. Клиент попытается:

INSERT  Locks
        (lockname)
VALUES  'MyLock'

Если это приводит к нарушению первичного ключа, клиенту не удалось получить блокировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...