Вот решение, которое я придумал для таблицы типа блокировки, которая может содержать только одну строку, содержащую Y или N (например, состояние блокировки приложения).
Создание таблицы с одним столбцом,Я поставил проверочное ограничение на один столбец, чтобы в него можно было вставить только Y или N.(Или 1 или 0, или что-то еще)
Вставьте одну строку в таблицу с «нормальным» состоянием (например, N означает, что он не заблокирован)
Затем создайте триггер INSERT для таблицыимеет только SIGNAL (DB2) или RAISERROR (SQL Server) или RAISE_APPLICATION_ERROR (Oracle).Это позволяет коду приложения обновлять таблицу, но любой INSERT завершается неудачно.
Пример DB2:
create table PRICE_LIST_LOCK
(
LOCKED_YN char(1) not null
constraint PRICE_LIST_LOCK_YN_CK check (LOCKED_YN in ('Y', 'N') )
);
--- do this insert when creating the table
insert into PRICE_LIST_LOCK
values ('N');
--- once there is one row in the table, create this trigger
CREATE TRIGGER ONLY_ONE_ROW_IN_PRICE_LIST_LOCK
NO CASCADE
BEFORE INSERT ON PRICE_LIST_LOCK
FOR EACH ROW
SIGNAL SQLSTATE '81000' -- arbitrary user-defined value
SET MESSAGE_TEXT='Only one row is allowed in this table';
Работает для меня.