2014-10-23 2 views
-1

를 작업하기 전에 나는 다음과 같은 트리거 한 :오라클 트리거하지 삭제

CREATE OR REPLACE TRIGGER SOL.AFTERIUDLIQUIDATIONSDETAILS 
    BEFORE INSERT OR DELETE 
    ON SOL.LIQUIDATIONSDETAILS 
    FOR EACH ROW 
BEGIN 
    IF INSERTING 
    THEN 
     UPDATE APPOINTSOFCAS 
     SET INLD = INLD + 1 
     WHERE  CUSTOMERID = :NEW.CUSTOMERID 
      AND ID = :NEW.APPOINTOFCAID 
      AND KINDCONTROLID = :NEW.KINDCONTROLID; 
    END IF; 

    IF DELETING 
    THEN 
     UPDATE APPOINTSOFCAS 
     SET INLD = INLD - 1 
     WHERE  CUSTOMERID = :NEW.CUSTOMERID 
      AND ID = :NEW.APPOINTOFCAID 
      AND KINDCONTROLID = :NEW.KINDCONTROLID; 
    END IF; 
END; 

사건 if 삽입은 잘 작동하지만, 경우 ID가 삭제되지. 어떤 생각?

+3

정확히 "* 작동하지 않음 *"은 무엇을 의미합니까? 방아쇠를 컴파일 할 때 오류가 발생합니까? 트리거가 작동하면 오류가 발생합니까? 그렇다면 ** 정확한 ** 오류 메시지가 있습니까? 잘못된 행을 업데이트합니까? 그것은 아무것도 업데이 트합니까? 그것은 많이 업데이 트합니까? –

답변

1

삭제할 때 the field values in the NEW pseudorecord are all null이므로 해당 입력란을 사용하여 검색어를 입력해도 아무 것도 일치하지 않습니다. 대신 OLD 참조 할 필요가 : 두 개의 세션을 삽입하거나 동시에 삭제하는 경우

IF DELETING 
    THEN 
     UPDATE APPOINTSOFCAS 
     SET INLD = INLD - 1 
     WHERE  CUSTOMERID = :OLD.CUSTOMERID 
      AND ID = :OLD.APPOINTOFCAID 
      AND KINDCONTROLID = :OLD.KINDCONTROLID; 
    END IF; 

당신은 동시성 문제가있을 수 있습니다; 둘 다 커밋 한 후 APPOINTSOFCAS에 들어가는 최종 가치는 기대 한 바가 아닐 수도 있습니다.

관련 문제