Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сообщение об ошибке в триггере / 7 сообщений из 7, страница 1 из 1
08.04.2021, 00:54
    #40060557
pirab41
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке в триггере
Добрый день.

У меня есть две таблички JournalFly и FlyArea (журнал полетов и посадочная площадка)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE JOURNALFLY (
    JOURNALID      INTEGER PRIMARY KEY ,
    DATEARRIVAL    TIMESTAMP,
    DATEDEPARTURE  TIMESTAMP,
    FLYAREAID      INTEGER 
);
 
CREATE TABLE FlyArea (
       FlyAreaID            INTEGER PRIMARY KEY,
       SizeArea             VARCHAR(10)
);



Я создала триггер, который проверяет: если дата прилета вертолёта попала в промежуток стоянки другого воздушного судна, то вертолет который прилетел не может сесть на эту посадочную площадку, где уже стоит воздушное судно (нужно будет указать номер другой площадки)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE EXCEPTION ErrorFlyArea 'Данная посадочная площадка уже занята';

CREATE OR ALTER TRIGGER FreeFlyArea FOR JournalFly
ACTIVE AFTER INSERT OR UPDATE
AS
DECLARE LFlyAreaID PKFIELD;
BEGIN 
FOR SELECT FlyAreaID FROM JournalFly WHERE NEW.DateArrival>=DateArrival AND NEW.DateArrival<=DateDeparture
INTO :LFlyAreaID
DO
BEGIN
 IF (NEW.FlyAreaID = LFlyAreaID)
  THEN EXCEPTION ErrorFlyArea;
  END
END



Вроде всё работает, но
Если я укажу посадочную площадку, на которой уже стоит воздушное судно, высветится сообщение об ошибке. И после этого, я уже не могу указать никакую площадку (пустую или же которая занята). Постоянно будет всплывать сообщение об ошибке

Помогите, пожалуйста...
...
Рейтинг: 0 / 0
08.04.2021, 01:09
    #40060559
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке в триггере
pirab41если дата прилета вертолёта попала в промежуток стоянки другого воздушного судна, то
вертолет который прилетел не может сесть на эту посадочную площадку, где уже стоит
воздушное судно

Может. Взлететь потом уже будет облом, но пассажиров даже не придётся соскребать ложками с
бетона.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.04.2021, 01:22
    #40060561
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке в триггере
Вот поэтому я стараюсь не летать.
...
Рейтинг: 0 / 0
08.04.2021, 09:36
    #40060597
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке в триггере
pirab41,

для начала поставьте триггер не на AFTER INSERT OR UPDATE, а на BEFORE ....
...
Рейтинг: 0 / 0
08.04.2021, 09:53
    #40060603
a7exander
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке в триггере
pirab41,

насчет того что постоянно будет всплывать сообщение об ошибке виновата ваша программа а не БД, ищите что вы там делаете после того как словите исключение, а вот зачем перебирать в триггере все посадочные площадки тогда как вам нужно всего одна совершенно непонятно, лучше NEW.FlyAreaID = LFlyAreaID добавьте в SELECT и выбирайте COUNT(*) и потом если >0 то EXCEPTION
...
Рейтинг: 0 / 0
08.04.2021, 13:04
    #40060667
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке в триггере
pirab41,

Вы хотите, чтобы из триггера открылось диалоговое окно для изменения номера площадки?
...
Рейтинг: 0 / 0
08.04.2021, 13:15
    #40060675
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке в триггере
Это в принципе не работоспособно в многопользовательском окружении.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сообщение об ошибке в триггере / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]