sql >> Databáze >  >> RDS >> Oracle

Aktualizace Oracle Triggers at Another Table

  1. IF příkaz potřebuje THEN
  2. V PL/SQL používáte = testovat rovnost, ne ==
  3. Musíte deklarovat proměnné, do kterých vybíráte

Když udělám tyto tři věci, dostanu něco takového

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

Kromě těchto syntaktických chyb bych byl šokován, kdyby SELECT INTO prohlášení bylo správné. A SELECT INTO musí vrátit přesně 1 řádek. Váš dotaz by měl téměř jistě vrátit více řádků, protože neexistují žádné predikáty, které by omezovaly dotaz na konkrétní let nebo konkrétní rezervaci. Pravděpodobně se chcete připojit k jednomu nebo více sloupcům v PASSENGER_BOOKING tabulka.

Pokud se navíc jedná o něco jiného než domácí úkol, ujistěte se, že rozumíte tomu, že tento druh spouštěče nefunguje správně v prostředí s více uživateli.



  1. docker-compose rails rake db:reset selže, nelze zrušit aktuálně otevřenou databázi

  2. SQLException:Před začátkem sady výsledků

  3. Úvod do C

  4. Oracle pl-sql escape znak (pro ' )