2013-06-20 1 views
0

테이블 ABCabc_xyz 업데이트를위한 AFTER UPDATE 트리거를 작성했습니다. 누군가가 동일한 테이블의 열 ans_mode을 업데이트하려고하면 트리거가 시작됩니다. abc_xyz의 기본값은 0입니다. 트리거가 1으로 업데이트해야합니다. AFTER UPDATE 트리거

CREATE OR REPLACE TRIGGER switchtrigger 
    AFTER UPDATE OF ans_mode 
    ON ABC 
BEGIN 
    UPDATE ABC 
     SET abc_xyz = 1 
    WHERE abc_xyz= 0 AND ; 
END; 

나는 만 특정 행을 업데이트하기 위해 있도록 AND 조건을 쓰기 위해 노력하고 있어요.

답변

2

위의 트리거는 행 트리거 대신 명령문 트리거입니다. 원하는 값에 새로운 가치 :

CREATE OR REPLACE TRIGGER SWITCHTRIGGER 
    BEFORE UPDATE OF ANS_MODE ON ABC 
    FOR EACH ROW 
BEGIN 
    IF :OLD.ABC_XYZ = 0 THEN 
    :NEW.ABC_XYZ := 1; 
    END IF; 
END; 

공유하고 즐길 IMO 당신이 단지를 변경할 수 있도록 이것은 BEFORE UPDATE 행 트리거 할 수있는 것이 좋을 것입니다.

+0

Thanks Jarvis, 행 트리거를 쓰려고했지만 같은 테이블에서 updation이 수행되면서 테이블 오류가 변경되었습니다. ABC_XYZ의 기본값은 0입니다. 그래서 쿼리에 언급 된 IF 조건은 모든 행을 바로 업데이트 할 것입니다. ?? 사용자/누군가가 변경 한 행을 우회하기 만하면됩니다. –

+1

행 트리거에서 테이블이 선언 된 테이블에 액세스하는 SQL 문을 실행할 수 없습니다. 이는 "테이블 변경"오류에 관한 것입니다. ON UPDATE 행 트리거는 선언 된 조건에 따라 실제로 변경된 행에 대해서만 호출되므로이 트리거는 ABC.ANS_MODE가 변경된 행에만 영향을 미칩니다. 약간의 코드를 작성하고 테스트 해보는 것이 좋습니다. –

+0

답장을 보내 주시면 죄송합니다. 감사합니다. Jarvis. 나는 시험을했고 효과가 있었다. After 업데이트 트리거를 사용하면 어떤 차이가 있습니까? (업데이트 이후에는 발생하지 않음) –

관련 문제