Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle задейства актуализация на друга маса

  1. IF изразът се нуждае от THEN
  2. В PL/SQL използвате = за тестване за равенство, а не ==
  3. Трябва да декларирате променливите, в които избирате

Когато направя тези три неща, получавам нещо подобно

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

Освен тези синтактични грешки, бих бил шокиран, ако SELECT INTO твърдението беше правилно. A SELECT INTO трябва да върне точно 1 ред. Вашата заявка почти сигурно трябва да върне множество редове, тъй като няма предикати, които биха ограничили заявката до определен полет или конкретна резервация. Предполага се, че искате да се присъедините към една или повече колони в PASSENGER_BOOKING таблица.

Освен това, ако това е нещо различно от домашна работа, уверете се, че разбирате, че този вид задействане не работи правилно в среда с много потребители.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Настройка на производителността на SQL за Oracle много ИЛИ срещу IN ()

  2. Преброяване на CLOB дубликати в голяма таблица на Oracle

  3. Проверете редовете за монотонно нарастващи стойности

  4. OracleCommandBuilder.DeriveParameters() хвърля OracleException:ORA-06564:обектът не съществува ORA-06512:в SYS.DBMS_UTILITY

  5. Как да разрешите ORA-29913 с външни таблици