Я пытаюсь создать хранимую процедуру MySQL, которая обрабатывает покупку книги и вставляет записи в другие таблицы о покупке. Однако эти вставки могут произойти только при соблюдении трех условий: клиент находится в системе, книга находится в системе, и их достаточно. Я хочу проверить каждое условие отдельно, и если оно проходит первое условие, оно переходит к следующему, но если это не так, я хочу, чтобы он завершил процедуру и возвратил значение, и так далее для каждого условия. Если он проходит все три условия, вставки могут произойти. Вот как я его кодировал:
DELIMITER //
CREATE PROCEDURE process_purchase(
IN book_key INT,
IN customer_key INT,
IN quantity INT
)
BEGIN
DECLARE book_inventory_key_var INT;
DECLARE purchase_key_var INT;
SELECT book_inventory_key
INTO book_inventory_key_var
FROM book_inventory
WHERE book_key = book_key.book_inventory_key;
SELECT purchase_key
INTO purchase_key_var
FROM purchases
WHERE customer_key = customer_key.purchases;
IF customer_key != customer_key.customers THEN
SELECT '-1';
ELSEIF book_key != book_key.books THEN
SELECT '-2';
ELSEIF quantity < quantity_on_stock(book_key) THEN
SELECT '-3';
ELSE
INSERT INTO purchases VALUES (customer_key, CURDATE());
INSERT INTO purchase_items (book_inventory_key, purchase_key, quantity) VALUES (book_inventory_key_var, purchase_key_var, quantity);
SELECT '1';
END IF;
END//
DELIMITER ;
Я сравниваю ключи клиента и книги с их значениями в других таблицах, а количество - с хранимой функцией amount_on_stock, которую я сделал ранее. Я использую цепочку IF-ELSEIF для go через каждое условие одно за другим, и, если все они пройдены, вставки происходят. Если нет, он не перейдет к следующему условию go и вернет сообщение SELECT, верно? Процедура выполняется без ошибок, но я не уверен, является ли это правильным методом или есть лучший способ сделать это.