2014-11-29 1 views
0

트리거에 문제가 있습니다. 데이터베이스에 트리거를 추가 한 후 트리거가 작동 할 행을 삽입하려고하면 테이블 변경 오류가 발생합니다. 나는 이것을 피하는 법을 모른다. 누군가 이것을 보면서 내가 뭘 잘못하고 있는지, 그리고 그것을 다시 쓰는 방법을 말해 주시겠습니까?삽입 할 때 트리거에 변형 오류가 있습니다.

CREATE OR REPLACE TRIGGER ORNG_INV_LINE_TOTAL_TRIGGER 
FOR INSERT OR UPDATE ON ORNG_INV_LINE 
COMPOUND TRIGGER 
AFTER EACH ROW IS 
BEGIN 
UPDATE ORNG_INVOICE SET Inv_Amount = (SELECT SUM(ORNG_INV_LINE.Inv_Line_Total) 
FROM ORNG_INV_LINE 
WHERE ORNG_INVOICE.INV_Num = :NEW.INV_Num); 
END AFTER EACH ROW; 
END ORNG_INV_LINE_TOTAL_TRIGGER; 
/

왜 오류가 발생하는지 잘 모르겠습니다. 업데이트 후 작업을 수행하려고합니다. 모든 일치하는 송장 번호의 모든 줄에 대해 합계를 구하고 그 값을 INVOICE 테이블에 씁니다. 도와 주셔서 감사합니다.

답변

1

삽입 또는 업데이트를 위해 ORNG_INV_LINE 테이블에 트리거가 기록되고 ORNG_INVOICE 테이블을 업데이트하는 동안 동일한 테이블에서 트리거가 작성되므로 트리거가 변경되어 이상이되면 행 대신 문 수준 트리거를 사용해야합니다. 레벨 트리거. 즉 각 문 다음에 코드가 있어야합니다. 도움이 될 것입니다.

+0

아래 게시물에 대한 죄송합니다, 내 답변을 게시 할 때 나는 이것을 보지 못했습니다. 아래에서 볼 수 있듯이 진술 수준 트리거를 사용하는 것이 정확했습니다. 나는 그것을보고있어 주셔서 감사합니다 ... 아직도 불행히도,이 쓰레기 걸리지는 않습니다. – jjmil03

1

여기 솔루션입니다 ... 분명히 모두가 추수 감사절로 바쁩니다. 다행히도 이것은 다음 사람을 돕습니다.

create or replace TRIGGER ORNG_INV_L_TTL_TRIG 
AFTER INSERT OR UPDATE OR DELETE ON ORNG_INV_LINE 
BEGIN 
UPDATE ORNG_INVOICE SET Inv_Amount = (SELECT SUM(Inv_Line_Total) 
FROM ORNG_INV_LINE 
WHERE INV_Num = ORNG_INVOICE.INV_Num); 
END ORNG_INV_L_TTL_TRIG; 
/
관련 문제