Oracle触发器更新不同表中的实体

pri*_*ish 2 oracle triggers

所以这是一个单一的课程,是我第一次使用Oracle(和使用触发器).我们应该为航空公司创建一个数据库.

部分数据库是

CREATE TABLE FLIGHT_BOOKING (
  BOOKING_ID NUMBER(11) PRIMARY KEY,
  BOOKING_TIME DATE NOT NULL,
  EMPLOYEE_ID NUMBER(11) NOT NULL,
  FLIGHT_ID NUMBER(11) NOT NULL,
  TOTAL_COST NUMBER(4,2) NOT NULL
);

CREATE TABLE FLIGHT (
  FLIGHT_ID NUMBER(11) PRIMARY KEY,
  PLANE_ID NUMBER(11) NOT NULL,
  START_ID NUMBER(11) NOT NULL,
  DESTINATION_ID NUMBER(11) NOT NULL,
  TRANSIT_ID NUMBER(11),
  DEPARTURE_TIME DATE NOT NULL,
  ARRIVAL_TIME DATE NOT NULL,
  NUM_BOOKED NUMBER (4) NOT NULL
);

CREATE TABLE PASSENGER (
  PASSENGER_ID NUMBER(11) PRIMARY KEY,
  FIRST_NAME VARCHAR2(20) NOT NULL,
  MIDDLE_NAME VARCHAR2(20) NULL,
  LAST_NAME VARCHAR2(20) NOT NULL,
  TELEPHONE NUMBER(11) NOT NULL,
  BOOKING_ID NUMBER(11) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是创建一个触发器,以便每次将新乘客添加到PASSENGER表时,触发器会从FLIGHT_BOOKING表中找到相应的FLIGHT_ID,并在FLIGHT表中为相应的航班增加NUM_BOOKED.

我已经尝试过浏览oracle文档,但我找不到任何描述两个或更多表所涉及的情况的内容.

任何帮助将非常感激!

Thi*_*hbk 5

你可以这样做:

CREATE OR REPLACE TRIGGER update_flight_booking_info
  AFTER INSERT ON PASSENGER
  FOR EACH ROW

DECLARE
    v_flight_id number;
    v_booking_id number;
BEGIN
    v_booking_id  := :new.booking_id ;

    select flight_id into v_flight_id
    from flight_booking
    where booking_id = v_booking_id;

    update flight
    set NUM_BOOKED = NUM_BOOKED + 1
    where flight_id = v_flight_id;
END;
Run Code Online (Sandbox Code Playgroud)

HTH.