在 MySQL- 新用户中创建存储函数/过程

Creating a Stored Function/ Procedure in MySQL- New User

使用来自该站点的数据:https://www.sqlservertutorial.net/sql-server-sample-database/

我收到提示

Create a stored function called findStoreByProduct() that will take a string as input, and return a store_id. The store_id relates to the store with the largest stock the product identified in the input string.

谁能先说说存储函数和存储过程的区别?我对此仍然有些迷茫。我已经浏览了关于同一问题的其他 Whosebug 帖子,但仍然一片空白。

那么有人可以帮助我理解 how/where 开始吗?我的第一个想法是 link 使用子查询的三个表(产品、订单项和订单),但显然它应该比这更基本。

@Imran Faruqi

我以为我已经在你的帮助下解决了这个问题,但我认为我的代码有问题,因为尽管我有 select 语句,但我一直得到相同的输出。

 DELIMITER //
CREATE function findStoreByProduct (product_name VARCHAR(300))
RETURNS INT DETERMINISTIC
BEGIN
DECLARE storeID INT;
DECLARE storeQuantity INT;
SELECT s.store_id from stocks as s
    INNER JOIN
        products AS p
        ON s.product_id = p.product_id
        ORDER BY p.product_id DESC
        LIMIT 1
        INTO storeID;
RETURN(storeID);
END //
SELECT findStoreByProduct("Trek XM700+ - 2018");

无论我在函数中输入什么,我总是得到相同的结果“1”。有什么想法吗?

This SO Post 定义存储过程与函数。

Then can someone aid me in understanding how/where to start?

首先,您需要创建一个标量函数,它将 return 只有一个值,即整数值。

  1. 通过产品名称(在函数参数中提供)查找product_id

  2. 找到数量最多的商店,其次是上面获得的product_id。您可以使用聚合函数实现这一点(此处将使用 MAX())。确保按 product_id

  3. 分组

另一种策略:

您可以在这两个表之间进行连接并使用 WHERE 子句来匹配产品名称(在函数参数中提供),以及使用上面建议的聚合函数和 GROUP BY 子句。