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

Aggiornamento dei trigger Oracle su un altro tavolo

  1. Un IF l'istruzione richiede un THEN
  2. In PL/SQL, usi un = per verificare l'uguaglianza, non ==
  3. Devi dichiarare le variabili in cui stai selezionando

Quando faccio queste tre cose, ottengo qualcosa del genere

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

Al di là di questi errori di sintassi, sarei scioccato se il SELECT INTO affermazione era corretta. Un SELECT INTO deve restituire esattamente 1 riga. La tua query dovrebbe quasi sicuramente restituire più righe poiché non ci sono predicati che limiterebbero la query a un volo particolare o a una prenotazione particolare. Presumibilmente, vuoi unirti a una o più colonne nel PASSENGER_BOOKING tabella.

Inoltre, se si tratta di qualcosa di diverso da un compito a casa, assicurati di comprendere che questo tipo di trigger non funziona correttamente in un ambiente multiutente.