sql >> Database teknologi >  >> RDS >> Oracle

Oracle udløser opdatering ved et andet bord

  1. En HVIS sætning har brug for en THEN
  2. I PL/SQL bruger du en = at teste for lighed, ikke ==
  3. Du skal erklære de variabler, du vælger til

Når jeg gør de tre ting, får jeg sådan noget her

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;​

Ud over disse syntaksfejl ville jeg blive chokeret, hvis SELECT INTO udsagnet var korrekt. En SELECT INTO skal returnere præcis 1 række. Din forespørgsel bør næsten helt sikkert returnere flere rækker, da der ikke er nogen prædikater, der vil begrænse forespørgslen til en bestemt flyafgang eller en bestemt reservation. Du vil formodentlig slutte dig til en eller flere kolonner i PASSENGER_BOOKING tabel.

Derudover, hvis dette er noget andet end en hjemmeopgave, skal du sørge for at forstå, at denne form for trigger ikke fungerer korrekt i et flerbrugermiljø.



  1. hvordan man vælger fødselsdage 7 dage før i dag i mysql

  2. Hvordan fungerer HANDLER FOR NOT FOUND, og ​​hvad er dets brug?

  3. SQLite Opret tabel

  4. Tjek om posten allerede findes i databasen