0

データベースに一連のテーブルがあります。それらの構文は次のとおりです。

CREATE TABLE Concert
(concert_id NUMBER (3) NOT NULL,
 concert_name VARCHAR (14) NOT NULL,
 concert_duration NUMBER (1) NOT NULL,
 concert_type VARCHAR (10) NOT NULL,
 artist VARCHAR (14) NOT NULL,
 concert_cost NUMBER (3) NOT NULL
);

CREATE TABLE Customer
(customer_id NUMBER (4) NOT NULL,
 firstname VARCHAR (14) NOT NULL,
 lastname VARCHAR (14) NOT NULL,
 gender VARCHAR (1) NOT NULL,
 street VARCHAR (14),
 city VARCHAR (14),
 country VARCHAR (14),
 postcode VARCHAR (8) NOT NULL
);

CREATE TABLE Event
(event_id NUMBER (3) NOT NULL,
 event_date DATE NOT NULL,
 venue_id NUMBER (2) NOT NULL,
 concert_id NUMBER (3) NOT NULL
);

CREATE TABLE Venue
(venue_id NUMBER (2) NOT NULL,
 venue_name VARCHAR (14) NOT NULL,
 max_capacity NUMBER (5) NOT NULL,
 street VARCHAR (14),
 city VARCHAR (14),
 country VARCHAR (14),
 postcode VARCHAR (8) NOT NULL
);

CREATE TABLE Booking
(arrival_time VARCHAR (8) default to_char(localtimestamp,'HH:MI') check(arrival_time like '__:___AM' or arrival_time like '__:___PM'),
 vehicle_no VARCHAR (8),
 evaluation NUMBER (1) NOT NULL CONSTRAINT ck_evaluation CHECK (evaluation BETWEEN 0 AND 5),
 event_id NUMBER (3) NOT NULL,
 customer_id NUMBER (4) NOT NULL
);

Concert_idとvenue_idは、イベントテーブルの外部キーです。Event_idとcustomer_idも、予約テーブルの外部キーです。名と姓(顧客テーブルから)、concert_name(コンサートテーブルから)、event_date(イベントテーブルから)、venue_name(会場テーブルから)、および評価(予約テーブルから)を監査テーブルに配置するトリガーを作成したい顧客がゼロ評価をした場合。監査テーブルを次のように作成しました。

CREATE TABLE audit_evaluation
(firstname VARCHAR (14),
 lastname VARCHAR (14),
 concert_name VARCHAR (14),
 event_date DATE,
 venue_name (14),
 evaluation NUMBER (1)
);

この構文でトリガーを作成しようとしましたが、エラーが発生しました。

CREATE OR REPLACE TRIGGER trg_evaluation
  AFTER INSERT ON booking
    FOR EACH ROW
BEGIN
  IF (evaluation = 0)
  THEN
    INSERT INTO audit_evaluation (firstname, lastname, concert_name, event_date, venue_name, evaluation)
      VALUES (customer.firstname, customer.lastname, concert.concert_name, event.event_date, venue.venue_name, booking.evaluation);
  END IF;
END;

助けてください!!!

4

1 に答える 1

1
CREATE OR REPLACE TRIGGER trg_evaluation
  AFTER INSERT ON booking
    FOR EACH ROW
BEGIN
  IF (evaluation = 0)
  THEN
    INSERT INTO audit_evaluation (firstname, lastname, concert_name, event_date, venue_name, evaluation)
      VALUES (customer.firstname, customer.lastname, concert.concert_name, event.event_date, venue.venue_name, booking.evaluation);
  END IF;
END;

まず、ここには:oldまたは:new参照がないため、トリガーは他の 4 つのテーブルからどの行を選択すればよいかわかりません。ここでそれらの使用方法を学ぶ必要があります。トリガーを記述する準備ができたら、insertステートメントは次のようになります (の使用法に注意してください)-:new

INSERT INTO audit_evaluation (firstname, lastname, concert_name, event_date, venue_name, evaluation)
select c.firstname,c.lastname,con.concert_name,
       evt.event_date, ven.venue_name, :new.evaluation
  from customer c, concert con, event evt, venue ven
 where evt.evt_id = :new.event_id
   and c.customer_id = :new.customer_id
   and con.customer_id=c.customer_id
   and con.concert_id = evt.concert_id
   and evt.venue_id=ven.venue_id;

注 - ここにある「あまり友好的ではない」コメントに落胆しないでください。人々はただ「助けよう」としています。:)

于 2012-08-18T14:15:50.950 に答える