-1

我做了一个程序,其中两个查询返回值

甲和乙

a和b的减法是c

c = a-b;

如果 c 的值为正,则程序返回正确的值,如果 c 的值为负,则程序返回 NULL。

这是我的程序。

DELIMITER $$

USE `db`$$

DROP PROCEDURE IF EXISTS `getOutStandingBalance`$$

CREATE DEFINER=`root`@`%` PROCEDURE `getOutStandingBalance`(OUT Total DOUBLE SIGNED,IN OID INT)
    DETERMINISTIC
    COMMENT 'A procedure'
BEGIN
    DECLARE Credit DOUBLE;
    DECLARE Debit  DOUBLE;
    SELECT SUM(transaction.Amount) INTO Credit FROM `transaction` WHERE transaction.IsDeleted=0 AND transaction.IsCredit=1 AND transaction.OID=OID;

    SELECT SUM(transaction.Amount) INTO Debit FROM `transaction` WHERE transaction.IsDeleted=0 AND transaction.IsCredit=0 AND transaction.OID=OID;

    SET Total = (Credit-Debit);
END$$

DELIMITER ;
4

1 回答 1

2

如果没有为交易的贷方或借方找到任何行,则变量将为NULL。在 SQL 中,任何带有 a 的计算都会NULL产生NULL.

要修复,请执行以下操作:

SET Total = ifnull(Credit, 0) - ifnull(Debit, 0);

另外,将签名更改为

OUT Total decimal(16,2)

或类似的。你为什么用DOUBLE SIGNED

于 2012-06-22T10:49:01.023 回答