SELECT 命令在存储过程中无法正常工作 [duplicate]

SELECT command doesn't work properly in Stored procedure [duplicate]

提问人:Him 提问时间:10/30/2023 更新时间:10/30/2023 访问量:45

问:

我想创建存储过程,该过程在输入 2 个参数值后选择特定行。

所以我的代码是:

CREATE DEFINER=`root`@`localhost` PROCEDURE `find_stock_order`(
    in product_name varchar(45),
        thedate date)
BEGIN
    SELECT * from stock_order_view 
    WHERE product_name=product_name AND DateTime_order = thedate;
END

我使用 WHERE ....和。。。。以选择所需的行。但是,它显示的行数比需要的多,就好像我使用 OR 而不是 AND 一样。当我输入“可乐”product_name和日期“2022-12-01”时,它会显示所有带有“可乐”的行以及所有可能的日期,以及所有带有“2022-12-01”的行以及所有可能的产品。

我应该如何编写代码,使其仅显示 product_name='Cola' AND thedate='2022-12-01' 的行

mysql 过程

评论

0赞 Bagus Tesa 10/30/2023
“它显示的行数比需要的多,就好像我使用 OR 而不是 AND 一样” - 尝试在过程之外运行查询。
0赞 Him 10/30/2023
当我在程序外运行它时,它可以正常工作:SELECT * from stock_order_view WHERE product_name='Cola' AND DateTime_order = '2023-09-03';但是,我在存储过程中需要它
0赞 Bagus Tesa 10/30/2023
尝试重命名参数,使用不同的名称。具体来说,.product_name

答:

2赞 Amit Mohanty 10/30/2023 #1

此问题是由于 SQL 查询中的参数和列名之间的命名冲突造成的。当您对参数使用与查询中的列名相同的名称时,MySQL会将它们解释为相同,这就是为什么您得到的结果与您尝试过滤的特定值不匹配的原因。

CREATE DEFINER = `root`@`localhost` PROCEDURE `find_stock_order`(
    in p_product_name varchar(45),
    in p_thedate date)
BEGIN
    SELECT * from stock_order_view 
    WHERE product_name = p_product_name AND DateTime_order = p_thedate;
END