【问题标题】:Selecting all values from a table in mysql using a stored procedure使用存储过程从mysql中的表中选择所有值
【发布时间】:2016-11-09 05:17:40
【问题描述】:

我有一个名为 Contacts 的表,其中包含一个名为 person_id 的字段,我已连接到一个 java 应用程序。

如果应用程序中没有为 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 类型的其他字段尝试了同样的事情,并且该表未能返回任何值。

【问题讨论】:

    标签: mysql database stored-procedures


    【解决方案1】:

    尝试在 where 子句中使用 case 语句,如下所示

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

    希望这能解决您的问题

    【讨论】:

    • 感谢您的成功。但是我仍然有兴趣知道为什么我的代码不起作用。你知道为什么我的代码返回了一个空表吗?
    • 在您的代码中,尝试将if p_id = null then 更改为if p_id IS null then,如果这不起作用,请告诉我。
    • 它不适用于 p_id,因为它是一个 int 但它适用于其他类型为 varchar 的字段。谢谢你的回答。
    猜你喜欢
    • 2017-04-05
    • 2018-07-10
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多