使用存储过程从mysql中的表中选择所有值

时间:2016-11-09 05:17:41

标签: mysql database stored-procedures

我有一个名为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类型的其他字段尝试了同样的事情,并且表未能返回任何值。

1 个答案:

答案 0 :(得分:2)

尝试在 where子句中使用案例陈述,如下所示

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

希望这可以解决您的问题