так что для моей университетской курсовой работы я должен создать базу данных оракула для авиакомпании.(я впервые работаю с оракулом)
часть моего требования - определить, пригодны ли пилоты для полета.для этого мои таблицы employee и pilot_test настраиваются следующим образом:
CREATE TABLE PILOT_TEST (
TEST_ID NUMBER(11) PRIMARY KEY,
TEST_DATE DATE NOT NULL,
EMPLOYEE_ID NUMBER(11) NOT NULL
);
CREATE TABLE EMPLOYEE (
EMPLOYEE_ID NUMBER(5) PRIMARY KEY,
FIRST_NAME VARCHAR2(15) NOT NULL,
LAST_NAME VARCHAR2(20) NOT NULL,
MIDDLE_NAME VARCHAR2(15) NULL,
POSITION VARCHAR2(13) NOT NULL, /* pilot, booking clerk, maintenance staff*/
EMPLOYED_FROM DATE NOT NULL,
EMPLOYED_TO DATE NOT NULL,
TELEPHONE NUMBER(11) NOT NULL,
EMAIL VARCHAR2(40) NULL,
ADDRESS_LINE1 VARCHAR2(20) NOT NULL,
ADDRESS_LINE2 VARCHAR2(20) NULL,
TOWN VARCHAR2(20) NOT NULL,
POST_CODE VARCHAR2(9) NOT NULL,
SALARY NUMBER(6,2) NOT NULL,
STATUS VARCHAR2(16) NOT NULL /*working, on leave, contract expired, fired*/
);
каждый раз, когда в систему добавляется новый рейс, я использую триггер, чтобы проверить, действительно ли персонал, выделенный для полета на самолетепилот.в этом триггере я хотел бы проверить, что если он является пилотом, то является ли его последний TEST_DATE менее 6 месяцев или нет.какие-либо идеи о том, как это можно сделать?
мой текущий триггер выглядит так
CREATE OR REPLACE TRIGGER CHECK_PILOT_ALLOCATION
BEFORE INSERT ON FLIGHT
FOR EACH ROW
DECLARE
TEMP_POSITION VARCHAR2(13);
BEGIN
SELECT POSITION INTO TEMP_POSITION
FROM EMPLOYEE
WHERE EMPLOYEE_ID = :NEW.PILOT_ID;
IF UPPER (TEMP_POSITION) <> 'PILOT' THEN
RAISE_APPLICATION_ERROR (-20001, 'Assigned employee is not a pilot');
ELSIF
END IF;
END;
/