2014-09-30 121 views
0

请看下面的SQL查询。在MySQL触发器中创建变量

DELIMITER $$ 
CREATE TRIGGER `Portfolio_AINS` AFTER INSERT ON `Portfolio` FOR EACH ROW 
INSERT INTO Initial_Fees (idPortfolio, Current_Time_Stamp, Initial_Gross_Fee, Initial_Monetary_Fee) 
VALUES (
New.idPortfolio, 
current_timestamp, 
(New.Invest_Amount*(New.Initial_Gross_Fee/100)), 
(New.Invest_Amount*(New.Initial_Gross_Fee/100))*(New.Initial_Company_Fee/100) 
) 

在这里,Initial_Monetary_Fee = Initial_Gross_Fee * (New.Initial_Company_Fee/100)

但我写它(New.Invest_Amount*(New.Initial_Gross_Fee/100))*(New.Initial_Company_Fee/100)

取而代之的是,我想创建变量和分配值给他们,所以我能避免这样长的计算。举个例子,像下面这样的东西。

InitialGrossFee = (New.Invest_Amount*(New.Initial_Gross_Fee/100)) 
IntialMonetaryFee = InitialGrossFee * (New.Initial_Company_Fee/100) 

那么,我该如何创建这样的变量并将值存储在侧面的MySQL触发器中呢?我更喜欢有一些解释。

回答

0

如果您在触发器中需要多个语句,您必须使用BEGIN .... END。 然后,您可以照常为用户分配值:

CREATE TRIGGER `Portfolio_AINS` AFTER INSERT ON `Portfolio` 
FOR EACH ROW 
BEGIN 
    SET @grossfee := New.Invest_Amount*(New.Initial_Gross_Fee/100); 
    INSERT INTO Initial_Fees (idPortfolio, Current_Time_Stamp, Initial_Gross_Fee, Initial_Monetary_Fee) 
    VALUES (
     New.idPortfolio, 
     current_timestamp, 
     @grossfee, 
     @grossfee *(New.Initial_Company_Fee/100) 
     ); 
END$$