Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle aciona atualização em outra tabela

  1. Um IF declaração precisa de um THEN
  2. Em PL/SQL, você usa um = para testar a igualdade, não ==
  3. Você precisa declarar as variáveis ​​nas quais está selecionando

Quando faço essas três coisas, recebo algo assim
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ém desses erros de sintaxe, eu ficaria chocado se o SELECT INTO afirmação estava correta. Um SELECT INTO deve retornar exatamente 1 linha. Sua consulta quase certamente deve retornar várias linhas, pois não há predicados que restringiriam a consulta a um voo específico ou uma reserva específica. Presumivelmente, você deseja ingressar em uma ou mais colunas no PASSENGER_BOOKING tabela.

Além disso, se isso não for uma tarefa de casa, certifique-se de entender que esse tipo de gatilho não funciona corretamente em um ambiente multiusuário.