programing

Oracle 트리거 ORA-04098: 트리거가 잘못되었으며 재검증에 실패했습니다.

closeapi 2023. 7. 10. 22:21
반응형

Oracle 트리거 ORA-04098: 트리거가 잘못되었으며 재검증에 실패했습니다.

오라클 10g 데이터베이스에 간단한 트리거를 생성하려고 합니다.트리거를 생성하기 위한 이 스크립트는 새로 실행됩니다.

CREATE OR REPLACE TRIGGER newAlert
AFTER INSERT OR UPDATE ON Alerts
  BEGIN
        INSERT INTO Users (userID, firstName, lastName, password) VALUES ('how', 'im', 'testing', 'this trigger')
  END;           
/

하지만 내가 달릴 때:

INSERT INTO Alerts(observationID, dateSent, message, dateViewed) VALUES (3, CURRENT_TIMESTAMP, 'Alert: You have exceeded the Max Threshold', NULL);

트리거를 활성화하기 위해 다음 오류 메시지가 표시됩니다.

ORA-04098: 트리거 'JMD.NEWALERT'가 잘못되었으며 재검증에 실패했습니다(0개의 행이 영향을 받음).

저는 무엇이 이 오류를 유발하는지 이해할 수 없습니다.이 오류의 원인이 무엇인지 아십니까?아니면 왜 이런 일이 일어나는 걸까요?

잘 부탁드립니다!

-데이비드

Oracle은 잘못된 개체를 참조할 때 다시 컴파일하려고 시도합니다.여기서 트리거는 유효하지 않으며, 행을 삽입할 때마다 트리거를 다시 컴파일하려고 시도했다가 실패하여 ORA-04098 오류가 발생합니다.

넌 할 수 있다.select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT'트리거에 실제로 발생하는 오류와 트리거가 컴파일되지 않는 이유를 확인합니다.이 경우 마지막에 세미콜론이 누락된 것 같습니다.insert선:

INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')

그럼 해보세요.

CREATE OR REPLACE TRIGGER newAlert
AFTER INSERT OR UPDATE ON Alerts
  BEGIN
        INSERT INTO Users (userID, firstName, lastName, password)
        VALUES ('how', 'im', 'testing', 'this trigger');
  END;           
/

편집할 때 컴파일 경고가 표시되면 다음 작업을 수행할 수 있습니다.show errorsSQL*Plus 또는 SQL Developer 또는 쿼리에 있는 경우user_errors다시.

물론, 이것은 당신의Users테이블에는 해당 열 이름이 있으며, 모두varchar2하지만 아마도 방아쇠로 더 흥미로운 일을 하게 될 것입니다

원인: 실행을 위해 트리거를 검색하려고 시도했지만 잘못된 것으로 확인되었습니다.이는 또한 트리거에 대한 컴파일/인가가 실패했음을 의미합니다.

조치: 옵션은 컴파일/인가 오류를 해결하거나, 트리거를 비활성화하거나, 트리거를 삭제하는 것입니다.

구문

ALTER TRIGGER trigger_Name DISABLE;

ALTER TRIGGER trigger_Name ENABLE;

저의 경우, 시퀀스가 생성되지 않았기 때문에 이 오류가 발생했습니다.

CREATE SEQUENCE  J.SOME_SEQ  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE ;

언급URL : https://stackoverflow.com/questions/22668507/oracle-trigger-ora-04098-trigger-is-invalid-and-failed-re-validation

반응형