2012-02-01 3 views
0

MySQL Community Server 5.5.16에서 업데이트 트리거를 만들었지 만 문을 업데이트하려고하면 : Update Account set credit = 100 Where Number = 14001455; 오류가 발생합니다. "ERROR 1172 (42000) : 둘 이상의 결과가 있습니다. 열".MYSQL 트리거 업데이트가 정상적으로 작동하지 않습니다

delimiter | 
CREATE TRIGGER t_creditexceed AFTER UPDATE ON Account 
FOR EACH ROW 
BEGIN 
    DECLARE n_overdraft INTEGER; 
    DECLARE n_balance INTEGER; 
    DECLARE n_number INTEGER; 
    DECLARE n_credit INTEGER; 
    DECLARE credit_exception condition for SQLSTATE '07030'; 

    SELECT balance, credit, number INTO n_balance, n_credit, n_number 
    FROM Account; 
    IF ((n_balance < (-n_credit)) AND (n_balance >= 1.1 * (-n_credit))) 
    THEN 
    SET n_overdraft = n_balance + n_credit; 
    INSERT INTO overdraft (account_no, over_draft) VALUES (n_number, n_overdraft); 
    END IF; 
    IF (n_balance < 1.1 *(- n_credit)) 
    THEN signal credit_exception; 
    END IF; 
END; 
| 
delimiter ; 

답변

1

귀하의 문제는 진술 : SELECT balance, credit, number INTO n_balance, n_credit, n_number FROM Account; - 아마도 2 개 이상의 행을 반환하므로 MySQL은 정의한 변수에 값을로드 할 수 없습니다.

의도가 확실하지 않지만 NEW.OLD. 값을 찾고 계셨습니까?

2

이 쿼리는 :

SELECT balance, credit, number INTO n_balance, n_credit, n_number 
FROM Account; 

가 WHERE 절을하지 않는 당신에 모든 Account 기록을 선택 거라고, 그래서 나는이 오류가 무엇 내 코드 문제 왜 이해가 안 돼요 변수는 오류 메시지의 출처입니다. 변수를 선택하는 것은 하나의 결과 행이있을 때만 작동합니다. 여러 행이있는 경우 MySQL은 결과 집합에서 원하는 행을 알 수 없습니다. 그것은 당신을 위해 선택하지 않습니다.

1

초기 "선택 잔액, 신용, 번호"가 둘 이상의 행을 반환합니다.

관련 문제