У меня есть следующие таблицы:
CREATE TABLE review
(
review_id NUMBER(2) NOT NULL,
review_date DATE NOT NULL,
review_rating NUMBER(1) NOT NULL,
driver_no NUMBER(2) NOT NULL,
vehicle_id NUMBER(3) NOT NULL
);
CREATE TABLE testing
(
testing_id NUMBER(2) NOT NULL,
testing_start DATE NOT NULL,
testing_end DATE NOT NULL
driver_no NUMBER(2) NOT NULL,
vehicle_id NUMBER(3) NOT NULL
);
В основном автомобили проверяются водителями между двумя датами. После того, как тестирование закончено, водитель рассматривает транспортное средство.
Я хочу создать триггер, который предотвратит добавление неверного обзора. Проверка считается недействительной, если водитель проверяет транспортное средство до даты окончания испытания. Проверка также недействительна, если водитель проверяет транспортное средство, которое он не вел.
Например, водитель 1 испытывает транспортное средство 7 с 01 февраля 2019 года по 07 февраля 2019 года. Если проверка добавлена на 5 февраля 2019 года,Я хочу, чтобы триггер не вставлял это. Кроме того, если для автомобиля 5 добавлен обзор (когда автомобиль 7 тестировался), я хочу, чтобы триггер не вставлял его.
Это то, что у меня есть:
CREATE OR REPLACE TRIGGER review_check_validity
AFTER INSERT ON review
FOR EACH ROW
BEGIN
SELECT testing_start
FROM testing
WHERE driver_no = :new.driver_no;
SELECT vehicle_id
FROM testing
WHERE driver_no = :new.driver_no;
IF :new.review_date < testing_end THEN
raise_application_error(-20000, 'Review date cannot be before
testing end date');
END IF;
IF :new.vehicle_id != vehicle_id THEN
raise_application_error(-20000, 'Driver has never driven this
vehicle');
END IF;
END;
/
Триггер компилируется без каких-либо ошибок - однако, когда я пытаюсь проверить его, вставив неверную строку в таблицу REVIEW, я получаю сообщение об ошибке, указывающее
Точная выборка возвращает больше, чем запрошеноколичество строк
Может ли кто-нибудь указать, какие изменения необходимо внести в мой код для достижения желаемого результата?