2016-11-09 103 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