【问题标题】:Store procedure return all records but expect is one record in mysql存储过程返回所有记录,但期望是 mysql 中的一条记录
【发布时间】:2014-10-09 09:34:02
【问题描述】:

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

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");

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

我该如何解决这个问题?

【问题讨论】:

    标签: mysql sql stored-procedures mysql-workbench


    【解决方案1】:

    像这样重新创建你的过程:

     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
    

    不同之处仅在于过程变量名称,因为您将与列名称完全相同的名称使其始终保持正确,无论您传递什么。数据库会认为您将列名与同一事物进行比较。

    【讨论】:

      【解决方案2】:

      试试这个:对上述查询添加简单的更改

       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
      

      【讨论】:

      • 我试试这个我得到一个记录,但输入值和输出值不匹配。
      • 您能否更具体地说明您想要什么?您正在使用输入值调用 SP 以从 N 条记录中的物理表中过滤掉它。您可能会获得不止一条记录作为输出。为了限制你可以在最后使用 LIMIT 运算符。
      • 我把限制 1 表的第一条记录只返回。我通过不同的输入但输出是相同的。总是显示第一条记录。
      • 请更改所有 PROCEDURE 变量名称。它与列名完全相同。 SQL 会认为你放了这样的东西: 1=1 或 'JOHN' = 'JOHN' 这就是为什么当你限制它时结果不匹配 1 并且当你没有限制它时所有记录都出来了,因为无论如何它总是保持真实您传递的数据
      • 首先,您的初始查询是如何返回表中的所有行的?是否所有记录都满足 where 条件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2017-05-06
      • 1970-01-01
      相关资源
      最近更新 更多