sql >> Database >  >> RDS >> Oracle

Oracle triggert update aan een andere tafel

  1. Een IF statement heeft een THEN . nodig
  2. In PL/SQL gebruik je een = om te testen op gelijkheid, niet ==
  3. U moet de variabelen die u selecteert declareren in

Als ik die drie dingen doe, krijg ik zoiets als dit

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

Afgezien van die syntaxisfouten, zou ik geschokt zijn als de SELECT INTO stelling klopte. EEN SELECT INTO moet precies 1 rij retourneren. Uw zoekopdracht zou vrijwel zeker meerdere rijen moeten retourneren, aangezien er geen predikaten zijn die de zoekopdracht zouden beperken tot een bepaalde vlucht of een bepaalde boeking. Vermoedelijk wilt u zich aansluiten bij een of meer kolommen in de PASSENGER_BOOKING tafel.

Bovendien, als dit iets anders is dan een huiswerkopdracht, zorg er dan voor dat je begrijpt dat dit soort trigger niet correct werkt in een omgeving met meerdere gebruikers.



  1. Fulltext zoeken met InnoDB in MySQL

  2. Een CTE maken in Oracle

  3. Kan niet deelnemen aan een gedistribueerde transactie met NHibernate

  4. MySql cursors.execute() met slechts één parameter:Waarom wordt een string in een lijst gesegmenteerd?