【发布时间】:2019-06-04 19:28:57
【问题描述】:
当贷款表中有插入时,我正在尝试创建一个触发器来填充 aud 贷款表。我希望这个 aud 表有来自 Loan 表和另一个表的数据,所以我试图设置获取这些数据的变量。
创建触发器时出现错误“未知系统变量 'var1'”
这是数据库布局:
https://cdn.discordapp.com/attachments/582912082450710528/583696750322253824/unknown.png
DELIMITER $$
CREATE TRIGGER Loan_Insert AFTER INSERT ON loan
FOR EACH ROW
BEGIN
SET var1 =
(SELECT loan_type.type_of_loan
FROM loan INNER JOIN loan_type ON
loan.loan_type_idloan_type = loan_type.idloan_type
AND
loan.loan_type_idapp_type = loan_type.idapp_type
WHERE loan.loan_type_idloan_type = new.loan_type_idloan_type
AND loan.loan_type_idapp_type = new.loan_type_idapp_type);
SET var2 =
(SELECT loan_type.app_type
FROM loan INNER JOIN loan_type ON
loan.loan_type_idloan_type = loan_type.idloan_type
AND
loan.loan_type_idapp_type = loan_type.idapp_type
WHERE loan.loan_type_idloan_type = new.loan_type_idloan_type
AND loan.loan_type_idapp_type = new.loan_type_idapp_type);
INSERT INTO Aud_Loan(bk_Loan, type_of_loan, type_of_loan_description, application_type,
application_type_description, insert_date)
VALUES(new.idloan, new.loan_type_idloan_type, var1, new.loan_type_idapp_type, var2,CURDATE());
END $$
【问题讨论】:
-
你需要声明变量。
-
感谢您的回答。我忘记了。我通过在变量名称前添加 @ 来声明变量。这让我可以创建触发器。现在,当我尝试在触发器设置的表中插入一行时出现错误,即“子查询返回超过 1 行”,我相信它与我的触发器有关。你知道问题可能是什么吗?
-
用于检索 var1 和/或 var2 值的查询可能会返回多个结果;您需要确定获得单个结果的适当方法。 (LIMIT 1 会起作用,但如果您要返回多行,您可能应该仔细检查您的逻辑以确保您使用的是正确的。)
-
谢谢,就是这样!我现在的问题是它获得了两次值,因为有 2 笔贷款具有相同的 loan_type 和 app_type。但我希望只得到一次。我尝试了所有类型的连接(INNER、LEFT、RIGHT...),但都不起作用
-
看起来您实际上并不需要这些查询来引用
loan并加入loan_type;您应该可以使用您的new.值直接从loan_type中进行选择。
标签: mysql view triggers inner-join