so for my university coursework, i have to create an oracle database for an airline. (this is my first time working with oracle)
part of my requirement is to identify whether pilots are fit to fly. to do this, my employee and pilot_test tables are set up as follows :
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*/
);
whenever a new flight is added to the system, i use a trigger to check whether the staff allocated to fly the plane is actually a pilot.
into this trigger i would like to check that if he IS a pilot, then whether his last TEST_DATE is less than 6 months old or not. any ideas on how this could be done?
my current trigger looks like this
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;
/
try