存储过程返回所有记录,但期望是mysql中的一条记录



这是我创建存储过程的查询:

CREATE PROCEDURE `GetAccountDetails`(IN `Accountnumber` VARCHAR(50), IN `casshieldId` VARCHAR(50), IN `transactionbefore` DOUBLE, IN `sourceofTransaction` vARCHAR(50))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
SELECT * FROM account WHERE AccountNumber = Accountnumber AND casShieldId = casshieldId AND transactionBefore = transactionbefore AND sourceOfTransaction = sourceofTransaction;
END

当我调用存储过程时:

call GetAccountDetails("Accountnumber","casshieldId ",transactionbefore,"sourceofTransaction");

它返回该帐户表中的所有记录。

我该怎么解决这个问题?

重新创建这样的过程:

 CREATE PROCEDURE `GetAccountDetails`(IN `Accountnumber1` VARCHAR(50), IN `casshieldId1` VARCHAR(50), IN `transactionbefore1` DOUBLE, IN `sourceofTransaction1` vARCHAR(50))
        LANGUAGE SQL
        NOT DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN
    SELECT * FROM account WHERE AccountNumber = Accountnumber1 AND casShieldId = casshieldId1 AND transactionBefore = transactionbefore1 AND sourceOfTransaction = sourceofTransaction1;
    END

区别仅在于过程变量名,因为无论传递什么,都将与列名完全相同的名称与列名保持一致。DB会认为您将列名与相同的名称进行了比较。

试试这个:向上面的查询添加简单的更改

 BEGIN SELECT * FROM (SELECT * FROM account WHERE AccountNumber = Accountnumber AND casShieldId = casshieldId AND transactionBefore = transactionbefore AND sourceOfTransaction = sourceofTransaction) AS ALIAS ORDER BY ALIAS.AccountNumber LIMIT 1; END

最新更新