提问人:Him 提问时间:10/31/2023 最后编辑:Him 更新时间:10/31/2023 访问量:39
如何使用 IN 参数设置存储过程,以便它将空 ('') 视为选择所有值的命令
how to set Stored procedure with IN parameter so that it sees empty ('') as command to select all values
问:
我有一个代码
CREATE DEFINER=`root`@`localhost` PROCEDURE `find_stock_order`(
in_product_name varchar(45),
in_date DATE)
BEGIN
SELECT * from stock_order_view
where product_name=in_product_name and DateTime_order=in_date;
END
当我为这 2 个参数中的每一个写入值时,它就会起作用。但是,当我想仅按product_name而不是按订单日期查找所有订单时,它不起作用。我没有向参数in_date写任何东西(希望它会将其视为选择任何日期),但它显示错误。
例
我有桌子
product_name | DateTime_order |
---|---|
可乐 | 2022-01-01 |
汉堡 | 2022-12-10 |
汉堡 | 2022-06-10 |
我的参数:
- in_product_name - 汉堡
- in_date - (我什么都不写,所以它会自动看到“”)
因此,我想看到:
product_name | DateTime_order |
---|---|
汉堡 | 2022-12-10 |
汉堡 | 2022-06-10 |
但它显示一个错误,因为我需要输入参数中任何 DATE 格式的内容
答:
1赞
SelVazi
10/31/2023
#1
用于可选列,如@akina在评论中建议的那样:WHERE (column = in_value OR in_value IS NULL)
CREATE DEFINER=`root`@`localhost` PROCEDURE `find_stock_order`(
in_product_name varchar(45),
in_date DATE)
BEGIN
SELECT * from stock_order_view
where product_name=in_product_name and (DateTime_order = in_date OR in_date IS NULL);
END
如果您不想按DateTime_order过滤:
call find_stock_order('Burger', NULL);
结果:
product_name|DateTime_order|
------------+--------------+
Burger | 2022-12-10|
Burger | 2022-06-10|
评论
0赞
Him
11/2/2023
如果我(例如)没有在“调用 find_stock_order('Burger', NULL);”中写入 NULL 的选项,我应该如何更改您的代码?我只能选择在出现的窗口中编写一些参数,这些参数将自动转换为调用find_stock_order('Burger', NULL)
上一个:计划事件未正确执行
评论
WHERE (column = in_value OR in_value IS NULL)
''