这是我创建存储过程的查询:
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