我在MySQL社区服务器5.5.16中创建了一个更新触发器但是当我尝试更新语句时:Update Account set credit = 100 Where Number = 14001455;
我收到错误“ERROR 1172(42000):结果由多行组成”。我不明白为什么我会收到此错误以及我的代码出了什么问题:
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 ;
答案 0 :(得分:2)
此查询:
SELECT balance, credit, number INTO n_balance, n_credit, n_number
FROM Account;
没有WHERE子句,因此您将选择所有Account
个记录到变量中,这是错误消息的来源。只有当你有一个结果行时才选择输入变量 - 有多行,MySQL无法知道你想要从结果集中选择哪一行。它不会为你挑选。
答案 1 :(得分:1)
最初的“选择余额,信用,数字”返回多行。
答案 2 :(得分:1)
我认为您的问题是声明:SELECT balance, credit, number INTO n_balance, n_credit, n_number FROM Account;
- 它可能返回超过1行,因此MySQL无法将值加载到您定义的变量中。
不确定您的意图,但也许您正在寻找NEW.
和OLD.
值?