我有一个名为Contacts的表,其中一个名为person_id的字段已连接到java应用程序。
如果在应用程序中没有为person_id指定值,我想使用存储过程从contacts表中选择所有内容。
我想要执行的操作是:
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类型的其他字段尝试了同样的事情,并且表未能返回任何值。
答案 0 :(得分:2)
尝试在 where子句中使用案例陈述,如下所示
WHERE CASE WHEN p_id IS NOT NULL THEN person_id = p_id ELSE TRUE END
希望这可以解决您的问题