(несколько неуклюжий) обходной путь, который я использовал, состоял в том, чтобы определить ряд параметров, которые, как я думал, я мог бы использовать, и затем проверить, чтобы узнать, не является ли значение необязательного параметра NOT 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);