Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cập nhật kích hoạt Oracle ở một bảng khác

  1. IF câu lệnh cần có THEN
  2. Trong PL / SQL, bạn sử dụng = để kiểm tra sự bình đẳng, không phải ==
  3. Bạn cần khai báo các biến mà bạn đang chọn

Khi tôi làm ba điều đó, tôi nhận được một thứ như thế này

create or replace trigger PASSENGER_BOOKING_T1
  AFTER insert on PASSENGER_BOOKING
  for each row
declare
  l_seat       flight.seat%type;
  l_flight_id  flight.flight_id%type;
begin
  IF (:NEW.CLASS_TYPE = 'ECO')
  THEN
    SELECT F.AVL_SEATS_ECOCLASS,F.FLIGHT_ID 
      INTO l_seat, l_flight_id
      FROM BOOKING B, 
           JOURNEY_FLIGHT J, 
           FLIGHT F 
     WHERE B.JOURNEY_ID = J.JOURNEY_ID 
       and F.FLIGHT_ID = J.FLIGHT_ID;

    UPDATE FLIGHT 
       SET AVL_SEATS_ECOCLASS = (l_seat-1)
     WHERE FLIGHT_ID = l_flight_id;   
  END IF;
end;​

Ngoài những lỗi cú pháp đó, tôi sẽ bị sốc nếu SELECT INTO tuyên bố đã đúng. A SELECT INTO phải trả về đúng 1 hàng. Truy vấn của bạn gần như chắc chắn sẽ trả về nhiều hàng vì không có vị từ nào hạn chế truy vấn đối với một chuyến bay cụ thể hoặc một đặt chỗ cụ thể. Có lẽ, bạn muốn tham gia vào một hoặc nhiều cột trong PASSENGER_BOOKING bảng.

Ngoài ra, nếu đây không phải là bài tập về nhà, hãy đảm bảo rằng bạn hiểu rằng loại trình kích hoạt này không hoạt động chính xác trong môi trường nhiều người dùng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - Với mối quan hệ một đến nhiều, hãy chọn các hàng riêng biệt dựa trên giá trị tối thiểu

  2. Thêm ngày vào dấu thời gian

  3. Cơ sở dữ liệu Oracle Khóa chính Java JDBC

  4. CHỌN SQL đơn Trả lại nhiều hàng từ một hàng trong bảng

  5. Làm cách nào để xóa giá trị mặc định khỏi một cột trong oracle?