Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 455

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
вопрос по IB
хочу создать таблицу в которой при добавлении новой записи констраинт котролировал чтобы дата в новой записе была больше даты предидушых записей где значение поля id_tex совпадает
прошу обратить внимание на
constraint check_old
см приложение
оно неправильно работает

Приложение:
  1. create domain id_oper as integer check (value>0);
  2.  
  3. create generator id_oper;
  4.  
  5. create table oper
  6. (id id_oper not null,
  7. id_tex integer not null,
  8. in_num integer,
  9. date_oper date not null,
  10. id_dep integer not null,
  11. op_type char(1) CHARACTER SET WIN1251 not null COLLATE PXW_CYRL,
  12. otvet varchar(30) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
  13. mem BLOB SUB_TYPE 1 CHARACTER SET WIN1251 COLLATE PXW_CYRL,
  14. primary key (id),
  15. CONSTRAINT con_in_num CHECK(in_num =
  16. (SELECT tex.in_num FROM tex WHERE oper.id_tex = tex.id)),
  17. CONSTRAINT check_old CHECK(new.date_oper >
  18. (SELECT max(date_oper) FROM oper WHERE (id_tex = NEW.id_tex) and (id<>new.id))),
  19. foreign key(id_tex) references tex(id),
  20. foreign key(in_num) references tex(in_num),
  21. foreign key(id_dep) references dep(id));


Р.А. Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Р.А. (статус: Посетитель)
Вопрос отправлен: 28 марта 2008, 19:48
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, Раджабов Амин!
на первый взгляд всё нормально. Если не работает - попробуйте перенести проверку в before insert триггер.

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 31 марта 2008, 10:20
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 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;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.02 сек.