Как уже отмечали другие, существуют различные ошибки. Однако самая большая проблема заключается в том, что код, который вставляет данные в HIST_STATION, не является частью триггера - он просто бродит где-то в космосе.
Когда я начал корректировать отступ вашего кода, чтобы выяснить, что происходит, вот что я получил:
create or replace TRIGGER tupdate_hist_station
AFTER INSERT ON STATION
FOR EACH ROW
DECLARE
V_num_station STATION.NUM_STATION%type;
V_nb_reserve CLIENTS.NB_RESERV%type;
V_revenue number;
BEGIN
SELECT s.NUM_STATION
INTO v_num_station
FROM STATION s
WHERE s.NUM_STATION =: NEW.NUM_STATION;
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE("There is no new data added");
END;
Ваш триггер заканчивается, прямо там, после первого END
. Весь остальной код просто ... пропал.
Я думаю, что вы хотели:
create or replace TRIGGER tupdate_hist_station
AFTER INSERT ON STATION
FOR EACH ROW
DECLARE
V_num_station STATION.NUM_STATION%type;
V_nb_reserve CLIENTS.NB_RESERV%type;
V_revenue number;
BEGIN
BEGIN
SELECT s.NUM_STATION
INTO v_num_station
FROM STATION s
WHERE s.NUM_STATION = :NEW.NUM_STATION;
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE("There is no new data added");
END;
BEGIN
SELECT sum(c.NB_RESERV)
INTO V_nb_reserve
FROM CLIENTS c,
RESERVATION r,
CHAMBRE ch,
HOTEL h,
STATION s
WHERE c.NUMC = r.NUMC AND
r.IDCHAMBRE = ch.IDCHAMBRE AND
ch.NUM_HOTEL = h.NUM_HOTEL AND
h.NUM_STATION = s.NUM_STATION AND
s.NUM_STATION = v_num_station;
EXCEPTION
WHEN no_data_found THEN
V_nb_reserve:=0;
DBMS_OUTPUT.put_line("There is no reservation in a hotel in this station yet");
END;
BEGIN
SELECT SUM(p.MONTANT) INTO V_revenue
FROM PAYEMENT p,
CLIENTS c,
RESERVATION r,
CHAMBRE ch,
HOTEL h,
STATION s
where p.NUMC = c.NUMC AND
c.NUMC = r.NUMC AND
r.IDCHAMBRE = ch.IDCHAMBRE AND
ch.NUM_HOTEL = h.NUM_HOTEL and
h.NUM_STATION = s.NUM_STATION AND
s.NUM_STATION = v_num_station;
EXCEPTION
WHEN no_data_found THEN
V_revenue := 0;
DBMS_OUTPUT.put_line("There is no reservation in this station yet");
END;
INSERT INTO HIST_STATION
("NUM_STATION","ANNEE","NB_RESERV","REVENU")
VALUES
(V_num_station,(SELECT to_char(SYSDATE,'YYYY')FROM DUAL),V_nb_reserve,V_revenue);
END tupdate_hist_station;
/
SHOW ERRORS;
/
Удачи.