2016-11-09 95 views
1

我已經PERSON_ID一個調用一個稱爲字段Contacts表,我已連接到一個Java應用程序中選擇的所有值從表中的MySQL。使用存儲過程

如果應用程序爲person_id沒有指定值,我想用一個存儲過程來選擇一切從聯繫人表。

我要執行的操作是這樣的:

Select * from Contacts where (person_id like "%") 

爲此,我寫了下面所示的存儲過程:

Delimiter $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `selectTest2`(In p_id int(11)) 
BEGIN 
    if p_id = null then 
     set p_id = "%"; 
    end if; 
    select * from Contacts where (person_id like p_id); 
END $$ 
Delimiter ; 

然而,當我使用下面的在我的SQL運行此過程

call selectTest2(null) 

返回的表是空白的。我如何讓它顯示錶中的所有值?

參數的p_id從應用程序中的文本框中獲取其值。如果用戶輸入了一個ID,我希望程序只顯示該特定的記錄,否則我希望它顯示所有記錄。

我有什麼做錯了,我如何糾正?我知道,p_id是一個int,但我嘗試了類型varchar的其他字段相同的事情和表未能返回任何值。

回答

2

嘗試在使用case語句 where子句像下面

WHERE CASE WHEN p_id IS NOT NULL THEN person_id = p_id ELSE TRUE END

希望這應該解決您的問題

+0

謝謝這個工作。不過,我仍然有興趣知道我的代碼爲什麼不起作用。你有什麼想法爲什麼我的代碼返回一個空表? – Ar254

+0

在你的代碼中,嘗試改變'if p_id = null then'爲'如果p_id爲null then',並讓我知道如果這不起作用。 – Viki888

+0

它不適用於p_id,因爲它是一個int,但它適用於varchar類型的其他字段。謝謝您的回答。 – Ar254