|
Вопрос # 1 455/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
вопрос по IB
хочу создать таблицу в которой при добавлении новой записи констраинт котролировал чтобы дата в новой записе была больше даты предидушых записей где значение поля id_tex совпадает
прошу обратить внимание на
constraint check_old
см приложение
оно неправильно работает
Приложение: Переключить в обычный режим- create domain id_oper as integer check (value>0);
-
- create generator id_oper;
-
- create table oper
- (id id_oper not null,
- id_tex integer not null,
- in_num integer,
- date_oper date not null,
- id_dep integer not null,
- op_type char(1) CHARACTER SET WIN1251 not null COLLATE PXW_CYRL,
- otvet varchar(30) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
- mem BLOB SUB_TYPE 1 CHARACTER SET WIN1251 COLLATE PXW_CYRL,
- primary key (id),
- CONSTRAINT con_in_num CHECK(in_num =
- (SELECT tex.in_num FROM tex WHERE oper.id_tex = tex.id)),
- CONSTRAINT check_old CHECK(new.date_oper >
- (SELECT max(date_oper) FROM oper WHERE (id_tex = NEW.id_tex) and (id<>new.id))),
- foreign key(id_tex) references tex(id),
- foreign key(in_num) references tex(in_num),
- foreign key(id_dep) references dep(id));
 |
Вопрос задал: Р.А. (статус: Посетитель)
Вопрос отправлен: 28 марта 2008, 19:48
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович
Здравствуйте, Раджабов Амин!
на первый взгляд всё нормально. Если не работает - попробуйте перенести проверку в before insert триггер.
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 31 марта 2008, 17:04; участников в обсуждении: 1.
|
Р.А. (статус: Посетитель), 31 марта 2008, 17:04 [#1]:
Спасибо помогла добавил один триггер как писал
Помфюк Владимир Степанович
CREATE TRIGGER check_old FOR oper
ACTIVE
BEFORE insert
as
DECLARE VARIABLE last_date date;
begin
SELECT max(date_oper) FROM oper WHERE (id_tex = NEW.id_tex) into last_date;
if (new.date_oper < last_date)
then EXCEPTION bad_date_oper;
END;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|