트리거 내부의 돌연변이 테이블에서 DML 문을 사용할 수없는 것으로 알려져 있습니다. 오라클 문서 에서 발췌 :
변경 테이블은 UPDATE, DELETE 또는 INSERT 문으로 수정중인 테이블 또는 DELETE CASCADE 제한 조건의 영향으로 업데이트 될 수있는 테이블입니다.
트리거 명령문을 발행 한 세션은 변경 테이블을 조회하거나 수정할 수 없습니다. 이 제한은 트리거가 일치하지 않는 데이터 세트를 보지 못하게합니다.
그러나 insert into emp
SQL Developer 또는 SQL * Plus를 사용하여 수행 할 때이 데모 트리거가 "돌연변이 테이블"오류로 실패하지 않는 이유를 이해할 수 없습니다 .
CREATE OR REPLACE TRIGGER emp_bri
BEFORE INSERT ON emp
FOR EACH ROW
BEGIN
SELECT max(id) + 1 INTO :NEW.id FROM emp;
UPDATE emp SET salary = 5000;
END emp_bri;
다음 id
값 으로 삽입이 완료 되고 모든 emp
레코드가 업데이트됩니다 . Oracle Database 11g Enterprise Edition 릴리스 11.2.0.1.0을 사용하고 있습니다. 복합 트리거에 대해 읽었지만 샘플에서 사용하지 않습니다.
예, 나는 알고 있습니다 :)이 경우에는 예제가 좋지 않을 것입니다 ... 시퀀스와 트리거를 사용하여 자동 증가 값을 확실히 구현해야합니다.
—
센츄리
이것은 확실하다. Btw : 다음은 SQLFiddle 예제입니다 sqlfiddle.com/#!4/9e59f/2
—
a_horse_with_no_name
정보 공유, 멋진 링크 감사합니다. 오라클 SQL 테스트 웹 사이트 : 거기 몰랐
—
백부장
a_horse_with_no_name : 다른 예 : Fiddle-test-2 (SET salary = salary + 10)
—
ypercubeᵀᴹ
select max(id)
. 하지마 그것은 단순히 틀리며 확장되지 않습니다.