我有一个复杂的 MySQL 触发器,目前我想对其进行简化。下面是触发器。
CREATE TRIGGER `Ongoing_Portfolio_AINS` AFTER INSERT ON `Ongoing_Portfolio` FOR EACH ROW
BEGIN
UPDATE Portfolio
SET Invest_Amount = New.Investment_Value,
Cash_Value = New.Cash_Value,
Date_Of_Last_Update = New.Updated_Date
WHERE idPortfolio = New.idPortfolio;
INSERT INTO Ongoing_Fees (currentDate, Gross_Fee, Insurance_Fee, Submit_Fee)
SELECT current_timestamp,
New.Gross_Fee,
(New.Gross_Fee)*(p.E_Fee/100),
((New.Gross_Fee)*(p.E_Fee/100))-(p.s_Fee/100)
FROM Portfolio p
WHERE p.idPortfolio = New.idPortfolio;
END;
您在这里看到的只是一部分,还有更多。
你可以看到这样的行,
(New.Gross_Fee)*(p.i_Fee/100)
((New.Gross_Fee)*(p.i_Fee/100))-(p.s/100)
其实,
Insurance_Fee
- 是New.Gross_Fee
的百分比
Submit_Fee
- 是Insurance_Fee- (p.s_Fee/100)
我想为此引入变量,而不是写这些长长的计算。所以变量会是这样的
_InsuranceFee := (New.Gross_Fee)*(p.i_Fee/100)
_SubmitFee := _InsuranceFee - (p.s_Fee/100)
这种工作会简化计算,当然也易于阅读。但是,如您所见,我的“插入”查询实际上使用的是 Select
查询。这是因为所有“百分比”值都来自表 Portfolio
(别名 p
) 那么我如何为变量赋值并直接将它们插入到数据库中选择
查询?
否则,是否有任何其他方法可以将值分配给变量,这样我就可以在选择查询中使用变量?
最佳答案
你试过只使用局部变量吗?
declare `_InsuranceFee`, `_SubmitFee` decimal(10, 4);
INSERT INTO Ongoing_Fees (currentDate, Gross_Fee, Insurance_Fee, Submit_Fee)
SELECT current_timestamp, New.Gross_Fee,
`_InsuranceFee` := (New.Gross_Fee)*(p.E_Fee/100),
`_SubmitFee` := ((New.Gross_Fee)*(p.E_Fee/100))-(p.s_Fee/100)
FROM Portfolio p
WHERE p.idPortfolio = New.idPortfolio;
关于mysql - 为 SELECT 查询中的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188309/