





Согласно эта ошибка, в настоящее время нет возможности создавать необязательные параметры.
Необязательные параметры не поддерживаются в хранимых процедурах mySQL, и в настоящее время нет каких-либо планов по добавлению этой функции. Я бы рекомендовал передавать значение null для необязательных параметров.
Обходной путь (несколько неуклюжий), который я использовал, заключался в том, чтобы определить ряд параметров, которые, как я думал, я мог бы использовать, а затем проверить, является ли значение дополнительного параметра НЕ NULL перед его использованием:
CREATE PROCEDURE add_product(product_name VARCHAR(100), product_price FLOAT,
cat1 INT, cat2 INT, cat3 INT)
-- The cat? parameters are optional; provide a NULL value if not required
BEGIN
...
-- Add product to relevant categories
IF cat1 IS NOT NULL THEN
INSERT INTO products_to_categories (products_id, categories_id) VALUES (product_id, cat1);
END IF;
IF cat2 IS NOT NULL THEN
INSERT INTO products_to_categories (products_id, categories_id) VALUES (product_id, cat2);
END IF;
IF cat3 IS NOT NULL THEN
INSERT INTO products_to_categories (products_id, categories_id) VALUES (product_id, cat3);
END IF;
END
Если я не хочу использовать параметр при вызове сохраненного, я просто передаю значение NULL. Вот пример вызываемой хранимой процедуры:
CALL add_product("New product title", 25, 66, 68, NULL);
Функция IFNULL () очень хорошо вписывается в этот контекст; Я просто встроил его в список VALUES запроса INSERT.
дубликат: stackoverflow.com/questions/12652241/…