Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle déclenche la mise à jour à une autre table

  1. Un IF l'instruction a besoin d'un THEN
  2. En PL/SQL, vous utilisez un = pour tester l'égalité, pas ==
  3. Vous devez déclarer les variables dans lesquelles vous sélectionnez

Quand je fais ces trois choses, j'obtiens quelque chose comme ça

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

Au-delà de ces erreurs de syntaxe, je serais choqué si le SELECT INTO déclaration était correcte. Un SELECT INTO doit retourner exactement 1 ligne. Votre requête devrait presque certainement renvoyer plusieurs lignes car il n'y a pas de prédicat qui restreindrait la requête à un vol particulier ou à une réservation particulière. Vraisemblablement, vous souhaitez rejoindre une ou plusieurs colonnes dans le PASSENGER_BOOKING tableau.

De plus, s'il s'agit d'autre chose qu'un devoir, assurez-vous de bien comprendre que ce type de déclencheur ne fonctionne pas correctement dans un environnement multi-utilisateurs.