2012-12-04 5 views
0

직원의 급여를 업데이트해야하는 새 트리거를 만들었습니다. 테이블 지불에서 2 개의 값 (현금 및 월)을 가져 와서 "how_much_to_pay"컬럼으로 나눕니다. 트리거에서 테이블을 업데이트 할 수 없습니다.

나는 주제 바라 보았다 : MySQL triggers cannot update rows in same table the trigger is assigned to. Suggested workaround?

하지만 그들은 한 테이블에서만 사용하기 때문에 그것은 나를 도와 didin't 그들은 문제없이 "새로운"넣을 수 있습니다.

create trigger pay_out before insert on `payment_out` 
for each row 
then 
UPDATE `payment_out` o 
INNER JOIN payment p ON p.id_1 = o.id_1 AND o.id2 = p.id2 
SET o.`how_much_to_pay` = p.cash/p.months; 
end; 
$$ 
다음

있는 테이블 :

table payment_out 
id1 
id2 
how_much_to_pay 

table payment 
id1 
id2 
cash 
months 

그리고 오류 자체 : 여기

내 트리거입니다

1442 - Can't update table payment_out in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 

답변

1

당신이있는 경우 일대일 관계 둘 사이 테이블, 다음 삽입 트리거 이전에이 코드를 사용할 수 있습니다 -

BEGIN 
    SELECT p.cash, p.months INTO @cash, @months 
    FROM payment p 
    WHERE p.id_1 = NEW.id_1 AND p.id2 = NEW.id2; 

    SET NEW.how_much_to_pay = @cash/@months; 
END 
+0

글쎄,이 방법이 효과가 있지만 "지불 할 금액"이 NULL이고 심지어 현금 = 8000, 월 = 8 일 수도 있습니다. – trinny

+0

'p.cash' 또는'p.months' 중 하나가 null 일 수 있습니다. 없는. 트리거에서 SELECT를 실행하고 올바른 값을 WHERE 조건에 추가하십시오. 그 결과는 무엇입니까? – Devart

+0

내가 알아 차렸을 때 나는 그것을 0.00으로 바꿨다. – trinny

관련 문제