Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_ресторан_5семестр.doc
Скачиваний:
0
Добавлен:
23.01.2026
Размер:
1.76 Mб
Скачать
  1. Процедура «AddItemToOrder» для добавления позиций в заказ

В данной процедуре мы указываем заказ, блюдо из меню и количество блюд. Процедура проверяет параметры и в случае корректного ввода добавляет позиции в заказ. Помимо проверки параметров процедура следит за тем, чтобы заказ имел статус «Принят».

Запрос:

ALTER PROCEDURE rest.AddItemToOrder

@OrderID INT,

@ItemID INT,

@Quantity INT

AS

BEGIN

SET NOCOUNT ON;

IF NOT EXISTS (SELECT 1 FROM rest.Orders WHERE OrderID = @OrderID)

BEGIN

PRINT 'Ошибка: заказ не найден.';

RETURN;

END

DECLARE @CurrentStatus NVARCHAR(50);

SELECT @CurrentStatus = Status

FROM rest.Orders

WHERE OrderID = @OrderID;

IF @CurrentStatus <> 'Принят'

BEGIN

PRINT 'Ошибка: блюда можно добавлять только в заказы со статусом "Принят".';

RETURN;

END

IF NOT EXISTS (SELECT 1 FROM rest.MenuItems WHERE ItemID = @ItemID)

BEGIN

PRINT 'Ошибка: блюдо не найдено.';

RETURN;

END

DECLARE @Stock INT;

DECLARE @IsAvailable BIT;

DECLARE @Price DECIMAL(10,2);

SELECT

@Stock = Stock,

@IsAvailable = IsAvailable,

@Price = Price

FROM rest.MenuItems

WHERE ItemID = @ItemID;

IF @IsAvailable = 0

BEGIN

PRINT 'Ошибка: блюдо недоступно для заказа.';

RETURN;

END

IF @Quantity > @Stock

BEGIN

PRINT 'Ошибка: недостаточно порций. Остаток: ' + CAST(@Stock AS VARCHAR(10));

RETURN;

END

INSERT INTO rest.OrderItems (OrderID, ItemID, Quantity, UnitPrice)

VALUES (@OrderID, @ItemID, @Quantity, @Price);

PRINT 'Блюдо успешно добавлено в заказ.';

END

GO

Примеры использования

  1. Добавляем блюдо в несуществующий заказ

Напишем запрос, в котором попытаемся добавить блюда в несуществующий заказ:

EXEC rest.AddItemToOrder

@OrderID = 20,

@ItemID = 7,

@Quantity = 6;

Увидим соответствующую ошибку выполнения запроса (рис. 22).

Рисунок 22. Выполнение запроса

  1. Добавляем в заказ несуществующее блюдо

Напишем запрос, в котором добавляем в заказ несуществующее блюдо:

EXEC rest.AddItemToOrder

@OrderID = 6,

@ItemID = 20,

@Quantity = 6;

Ошибка выполнения (рис. 23).

Рисунок 23. Выполнение запроса

  1. Добавляем в заказ слишком много порций

Поскольку у каждого блюда есть запас, мы не можем добавить в заказ количество, превышающее это число. Напишем запрос, в котором добавляем 10 порций блюда, запас которого равен 8:

EXEC rest.AddItemToOrder

@OrderID = 6,

@ItemID = 1,

@Quantity = 10;

Соответствующая ошибка (рис. 24).

Рисунок 24. Выполнение запроса

  1. Добавляем блюдо в оплаченный заказ

Если заказ уже оплачен или ожидает оплаты, мы не можем добавить в него какие-то блюда. Запрос для оплаченного заказа:

EXEC rest.AddItemToOrder

@OrderID = 8,

@ItemID = 2,

@Quantity = 1;

Видим ошибку выполнения (рис. 25).

Рисунок 25. Выполнение запроса

  1. Правильный запрос

EXEC rest.AddItemToOrder

@OrderID = 6,

@ItemID = 1,

@Quantity = 6;

Блюдо успешно добавлено в заказ (рис. 26). Также видим предупреждение об ограниченном количестве порций для указанного блюда. Это значит, что порции еще есть, но их осталось меньше, чем указано в выполненном запросе.

Рисунок 26. Выполнение запроса