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

ORA-04091:表xx_xxが変更されています。トリガー/関数がそれを認識しない可能性があります

    トリガーで変更テーブルを照会することはできません。
    これを参照してください: https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm

    代わりに次のコードを試してください:

    create or replace 
    TRIGGER log_changes 
      AFTER INSERT OR UPDATE OR DELETE
      ON passengerlist1
      FOR EACH ROW
    
    DECLARE
     t_name varchar2(255);
     t_surname varchar2(255);
    BEGIN
       IF DELETING THEN
        SELECT PERSON1.GIVENNAME, PERSON1.FAMILYNAME INTO T_NAME,  T_SURNAME
        FROM PERSON1
        WHERE PERSON1.PERSONID = :OLD.PERSONID;
    
        INSERT INTO LOGS VALUES (T_NAME, T_SURNAME, :OLD.FLIGHTID, SYSDATE);
       END IF;
    
       IF UPDATING OR INSERTING THEN
    
         SELECT PERSON1.GIVENNAME,  PERSON1.FAMILYNAME  INTO T_NAME, T_SURNAME 
         FROM PERSON1 
         WHERE PERSON1.PERSONID = :NEW.PERSONID;
    
         INSERT INTO LOGS VALUES (T_NAME, T_SURNAME, :NEW.FLIGHTID, SYSDATE);
       END IF;
    END;
    /
    



    1. テーブルまたは列がデータベースに存在するかどうかを確認するにはどうすればよいですか?

    2. Postgresの一意性制約とインデックス

    3. PHPとMySQLでハッシュを塩漬けにする

    4. MySQLからOracleへの構文エラー(制限/オフセット/更新)