将查询编辑到存储过程中

时间:2014-07-23 13:44:08

标签: mysql sql stored-procedures

我有一个存储过程来调用MySQL,它接收3个参数。其中任何一个都可以为null。现在,如果它们为null,我必须运行一个打开的查询(没有where语句),如果它们不是,我必须使用我收到的值来应用约束。我在这里给你我的代码;)

DELIMITER ;;
CREATE PROCEDURE `getPeople`(
IN p_startDate DATE,
IN p_endDate DATE,
IN p_name TEXT
)
BEGIN
    SELECT * FROM people;
    -- if p_startDate is not null, 'append' to the query "WHERE birthdate >= p_startDate"
    -- if p_endDate is not null, 'append' to the query "WHERE birthdate <= p_endDate"
    -- if p_name is not null, 'append' to the query "WHERE name = p_name"
END;;
DELIMITER ;

我的第一种方法是编写3个不同的查询,但我无法混合它们(例如:p_startDate和p_endDate不为null,我只想要执行1个查询)。你能对我说些什么吗?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

我相信准备好的语句将是在MySQL中实现此目的的方法(您可以使用动态SQL在SQL服务器中实现此目的)

看看这里:

SQL Syntax for Prepared Statements

您可以将没有where子句的main语句放入一个变量中,然后使用所需的逻辑将所需的where子句附加到该字符串上,然后从中准备并执行查询。

上面的页面提供了一些您应该能够适应以满足您需求的示例。