2014-10-09 189 views
0

一个记录这是我创建存储过程的查询:存储过程返回所有记录,但想到是在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"); 

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

我该如何解决这个问题?

回答

0

重新创建你的程序是这样的:

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 

的差异只在过程变量的名字,因为你把完全相同的名称列名使其始终保持真实无论你通过什么。数据库会认为你比较你的列名和相同的东西。

0

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

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 
+0

我尝试这我得到一个记录,但输入值和输出值不匹配。 – nmkkannan 2014-10-09 09:48:30

+0

你能否更具体地说明你想要什么?您正在使用输入值调用SP,以便从N个记录中的物理表中将其过滤出来。有可能你可能会得到一个以上的记录作为输出。限制你可以在最后使用LIMIT操作符。 – knkarthick24 2014-10-09 09:53:09

+0

我把限制1表的第一条记录只返回了。我通过不同的输入但输出相同,总是显示第一条记录。 – nmkkannan 2014-10-09 09:56:51