sql >> データベース >  >> RDS >> Oracle

Oracleが別のテーブルで更新をトリガー

    1. IF ステートメントにはTHENが必要です
    2. PL / SQLでは、=を使用します ==ではなく、同等性をテストする
    3. 選択する変数を宣言する必要があります

    これらの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があれば、私はショックを受けます。 ステートメントは正しかった。 SELECT INTO 正確に1行を返す必要があります。クエリを特定のフライトまたは特定の予約に制限する述語がないため、クエリはほぼ確実に複数の行を返すはずです。おそらく、PASSENGER_BOOKINGの1つ以上の列に結合したいとします。 テーブル。

    さらに、これが宿題以外の場合は、この種のトリガーがマルチユーザー環境では正しく機能しないことを理解してください。



    1. グループ関数の無効な使用を与える単純なSQLクエリ

    2. SQL Server(T-SQL)で文字列を別の文字列に置き換える

    3. タイムスタンプを遅いクエリに設定するにはどうすればよいですか?

    4. 電話番号とアドレスのmysqlデータ型