ОШИБКА 1172 (42000): Результат состоит из более чем одной строки в хранимой процедуре mysql - PullRequest
0 голосов
/ 12 апреля 2020

Я получаю ОШИБКУ 1172 (42000): результат состоял из нескольких строк в моей хранимой процедуре, когда я использую CALL submitOrder (10, 100, 1, @OrderId);

Что пошло не так в моем код? Цель состоит в том, чтобы использовать процедуру для вставки новой строки в таблицу заказов и новой строки в деталях заказа в таблицу order_items.

DELIMITER //

CREATE PROCEDURE submitOrder(
IN customerId INT, 
IN productId INT, 
IN qty INT, 
OUT orderId INT)
BEGIN
DECLARE orderId, storeId, staffId, qty, customerId, productId INT; 
DECLARE listPrice DECIMAL(10,2); 
DECLARE discount DECIMAL(4,2);

SELECT MAX(order_id)+1 FROM orders INTO @orderId;

SELECT s.store_id
FROM stocks AS s
INNER JOIN products AS p USING (product_id)
WHERE p.product_id = s.product_id
ORDER BY s.quantity DESC
LIMIT 1
INTO @storeId;

SELECT staffs.staff_id 
FROM staffs
INNER JOIN stores
WHERE staffs.store_id = stores.store_id
LIMIT 1
INTO @staffID; 

SET @qty = 1;

SELECT products.product_id
FROM products
WHERE products.product_id = productId;

SELECT products.list_price
FROM products
INTO @listPrice;

INSERT INTO orders VALUES (
@orderId, @customerId, 1, CURDATE(), ADDDATE(CURDATE(), INTERVAL 7 day), NULL, @storeId, @staffId);

INSERT INTO order_items
VALUES (@orderId, 1, @productId, @qty, @listPrice,0);

END//

DELIMITER ;

1 Ответ

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

Вы забыли поместить предложение WHERE и LIMIT 1 в запрос, который устанавливает $listPrice. Вы также забыли установить @productId в любом месте.

Вы можете выполнить оба этих запроса в одном запросе.

SELECT product_id, list_price
FROM products
WHERE product_id = productId
LIMIT 1
INTO @productId, @listPrice;

Я не уверен, зачем вам нужна переменная @product_id, так как это будет так же, как productId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...