답변:
변경 테이블 오류의 가장 큰 원인은 트리거 오용입니다. 일반적인 예는 다음과 같습니다.
이것은 예상되는 정상적인 행동이며, 오라클은 다음을 보장하므로 오라클이 귀하를 보호하고자합니다.
이러한 종류의 트리거를 작성할 때 쿼리 (2)가 (1)에 삽입 된 행을 보게 될 것입니다. 업데이트가 아직 완료되지 않았기 때문에 위의 두 지점과 모순됩니다 (더 많은 행을 삽입 할 수 있음).
오라클 은 진술 시작 직전에 특정 시점과 일치하는 결과를 반환 할 수 있지만 대부분의 예 에서이 논리를 구현하려고 시도하는 사람들은 여러 행 진술을 연속적인 단계의 세리로보고 이전 단계에서 변경 한 내용을 확인하려면 [2] 문을 실행하십시오. Oracle은 예상 결과를 반환 할 수 없으므로 오류가 발생합니다.
자세한 내용 은 Ask Tom의 "mutating table"을 참조하십시오 .
변경 테이블 오류의 원인이 트리거라고 생각되는 경우 오류를 피하는 한 가지 방법은 트리거의 논리를 프로 시저로 이동하는 것입니다.
돌연변이 표는 성명 화재 및 방아쇠 참조 트리거를 발생하는 테이블에 트리거가 발생하면 발생합니다. 이러한 문제를 피하는 가장 좋은 방법은 트리거를 사용하지 않는 것이지만 DBA가이를 수행하는 데 시간이 걸리지 않은 것 같습니다. 그는 다음 중 하나를 수행 할 수있었습니다.