Единственность записи в таблице

NewOraUser
Дата: 20.09.2004 10:42:34
Доброе утро. Есть такая задача: обеспечить единственность записи в таблице. для этого я написал следующий триггер, но выглядит как-то криво:
DECLARE
nRecordCount NUMBER; --количество записей в mail_settings
cursor BlockMailSettings IS
SELECT * FROM mail_settings
FOR UPDATE;
BEGIN
--блокировка таблицы
OPen BlockMailSettings;

SELECT COUNT (*)
INTO nRecordCount
FROM mail_settings
;

IF nRecordCount >= 1
THEN
raise_application_error
(
-20001,
'Превышено количество записей'
);
END IF;
IF BlockMailSettings%ISOPEN THEN
CLOSE BlockMailSettings;
END IF;
exception
when others then
IF BlockMailSettings%ISOPEN THEN
CLOSE BlockMailSettings;
END IF;
raise;
END;

но чутье подсказывает, что это криво.
Что посоветуют знатоки?
Вячеслав Любомудров
Дата: 20.09.2004 10:44:05
unique constraint
Можно прямо по форуму поискать
Elic
Дата: 20.09.2004 10:51:48
dummy_column number(1) default 0 not null unique check (dummy_column=0)
NewOraUser
Дата: 20.09.2004 10:53:53
А как unique constraint обеспечит единственность записи? Он может, по-моему, обеспечить только ее уникальность.
Andrew Campball
Дата: 20.09.2004 10:58:11
NewOraUser
А как unique constraint обеспечит единственность записи? Он может, по-моему, обеспечить только ее уникальность.


Поле уникальное и в то же время не может содержать другие значения кроме 0.
NewOraUser
Дата: 20.09.2004 11:04:36
Под словом единственность понимаю: Количество записей в таблице равно 1.
DimaR
Дата: 20.09.2004 11:06:29
to Andrew Campball
А если он захочет заносить любые значения?

to NewOraUser

Можно в тригере before insert проверять наличие записи, если её нет то только тогда вставлять.
pnv
Дата: 20.09.2004 11:09:07
Не давать grant на insert и delete.
Andrew Campball
Дата: 20.09.2004 11:12:04
DimaR
to Andrew Campball
А если он захочет заносить любые значения?


Я так понимаю, человеку нужно, что бы в таблице была ТОЛЬКО одна запись и изменение других полей таблицы никак не повлияет на уникальность.
NewOraUser
Дата: 20.09.2004 11:14:53
Да.Мне нужно. чтобы в таблице была только одна запись. В хранимой процедуре, которая вставляет значения в эту таблицу, я могу делать действия, аналогичные в триггере, но что-то хочется сделать это на уровне таблицы.