2014-10-09 248 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