【问题标题】:MySQL store procedure Assign value to multiple variable from select statementMySQL存储过程从select语句为多个变量赋值
【发布时间】:2017-03-20 12:31:46
【问题描述】:

这是我的存储过程。我有问题将值分配给声明的变量。当我执行它时,插入和更新命令工作正常,但声明变量的值保持为 0;但我在数据库中有一些价值。我怎样才能正确地做到这一点。

BEGIN
DECLARE PaidFee INT DEFAULT 0; 
DECLARE DueFee INT DEFAULT 0; 
DECLARE CourseFee INT DEFAULT 0; 
INSERT INTO `creditdirectory`(`TypeID`, `PersonName`, `CreditBy`, `PersonID`, `ModeOfPayment`,`Details`,`Amount`,`CompanyID`) 
VALUES(1,PersonName,CreditBy, AddmissionID, ModeOfPayment, 'Installment', PaidAmount, 
 CompanyID); 
SELECT `CourseFee`,`PaidFee`,`DueFee` INTO CourseFee,PaidFee,DueFee FROM `studentcoursedetails` WHERE `ID`= CourseID; 
SET PaidFee = PaidFee + PaidAmount; 
SET DueFee = CourseFee - PaidFee; 
IF (NextDueDate !='') THEN 
UPDATE `studentcoursedetails` SET `PaidFee` = PaidFee, `DueFee` = DueFee, `DueDate` = NextDueDate WHERE `ID`= CourseID; 
ELSE 
UPDATE `studentcoursedetails` SET `PaidFee` = PaidFee, `DueFee` = DueFee, `DueDate` = NULL WHERE `ID` = CourseID; 
END IF; 
END

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    不要使用列名相同的变量,查询将优先考虑表列名。

    一个好主意是使用带前缀的变量:

    BEGIN
        DECLARE p_PaidFee INT DEFAULT 0; 
        DECLARE p_DueFee INT DEFAULT 0; 
        DECLARE p_CourseFee INT DEFAULT 0; 
        INSERT INTO `creditdirectory`(`TypeID`, `PersonName`, `CreditBy`, `PersonID`, `ModeOfPayment`,`Details`,`Amount`,`CompanyID`) 
        VALUES(1,PersonName,CreditBy, AddmissionID, ModeOfPayment, 'Installment', PaidAmount, 
         CompanyID); 
        SELECT `CourseFee`,`PaidFee`,`DueFee` INTO p_CourseFee,p_PaidFee,p_DueFee FROM `studentcoursedetails` WHERE `ID`= CourseID; 
        SET p_PaidFee = p_PaidFee + PaidAmount; 
        SET p_DueFee = p_CourseFee - p_PaidFee; 
        IF (NextDueDate !='') THEN 
            UPDATE `studentcoursedetails` SET `PaidFee` = p_PaidFee, `DueFee` = p_DueFee, `DueDate` = NextDueDate WHERE `ID`= CourseID; 
        ELSE 
            UPDATE `studentcoursedetails` SET `PaidFee` = p_PaidFee, `DueFee` = p_DueFee, `DueDate` = NULL WHERE `ID` = CourseID; 
        END IF; 
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      相关资源
      最近更新 更多