Создание сохраненной функции / процедуры в MySQL - новый пользователь - PullRequest
0 голосов
/ 21 апреля 2020

Использование данных с этого сайта: https://www.sqlservertutorial.net/sql-server-sample-database/

Мне выдается приглашение

Создайте хранимую функцию findStoreByProduct (), которая будет принимать строка в качестве входных данных и возвращает store_id. Аргумент store_id относится к магазину с наибольшим запасом, указанным во входной строке товара.

Может ли кто-нибудь сначала выяснить, в чем разница между хранимыми функциями и хранимыми процедурами? Я все еще немного потерян на этом. Я просмотрел другие посты, посвященные этой проблеме, но все еще рисую пробел.

Тогда кто-нибудь может помочь мне понять, как / с чего начать? Моей первой мыслью было бы связать три таблицы (продукты, позиции заказа и заказы) с помощью подзапросов, но, очевидно, это должно быть более базовым c.

@ 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". Есть мысли?

1 Ответ

0 голосов
/ 21 апреля 2020

Эта публикация SO определяет хранимые процедуры против функций.

Тогда кто-нибудь может помочь мне понять, как / с чего начать?

Сначала всего вам нужно создать скалярную функцию, которая будет возвращать только одно значение, то есть целочисленное значение.

  1. Найти product_id по названию продукта (предоставляется в параметрах функции).

  2. Найти магазин с наибольшим количеством, за которым следует product_id, полученный выше. Вы можете добиться этого, используя агрегатные функции (здесь будет использоваться MAX ()). Обязательно группируйте по product_id

Другая стратегия:

Вы можете объединить эти две таблицы и использовать предложение WHERE для соответствия названию продукта (предоставлено в параметры функции), а также использовать агрегированную функцию, предложенную выше, вместе с предложением GROUP BY.

...