Вот мои 3 таблицы.
Service (Serviceid,service_type,sname,ratings,address,due_date,company)
Hotel (hotelid,address,ratings,hotel_name,cityid)
Insurance(insuranceid,company,due_date)
Всякий раз, когда в таблицу отелей вносится вкладка, ее hotelanme, рейтинги, адрес, hotelid должны также указываться в таблице услуг.
INSERT INTO HOTEL VALUES(NEXTVAL('HOTELSQ'),'123,APPLE STREET',5.0,'GRAND BHAGVATI HOTEL',1003);
Вот мой код Trigger в postgres.
CREATE OR REPLACE FUNCTION INSERTFORHOTEL()
RETURNS TRIGGER AS
$$
BEGIN
INSERT INTO SERVICE(SERVICEID,SNAME,SERVICE_TYPE,RATINGS,ADDRESS) VALUES (NEW.HOTELID,NEW.HOTEL_NAME,'HOTEL',NEW.RATINGS,NEW.ADDRESS);
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER INSERTHOTEL BEFORE INSERT ON HOTEL
FOR EACH ROW EXECUTE PROCEDURE INSERTFORHOTEL();
Триггер запущен успешно, но когда я вставляю запись, как указано выше, она выдает следующую ошибку.
ERROR: duplicate key value violates unique constraint "service_pkey"
DETAIL: Key (serviceid)=(3524) already exists.
CONTEXT: SQL statement "INSERT INTO SERVICE(SERVICEID,SNAME,SERVICE_TYPE,RATINGS,ADDRESS) VALUES (NEW.HOTELID,NEW.HOTEL_NAME,'HOTEL',NEW.RATINGS,NEW.ADDRESS)"
PL/pgSQL function insertforhotel() line 3 at SQL statement
SQL state: 23505
И запись не вводится ..
Я сделал то же самое для страховой таблицы.Добавление записи в таблицу страхования также вставляет запись в таблицу Service, это сделано успешно.Но столик в отеле остается ..