Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Технологии Клиент/Сервер >> Разработка серверной части >> Поддержка целостности данных с помощью xранимой процедуры

[Назад]    [Содержание ]    [Вперед]

  


Поддержка целостности данных с помощью xранимой процедуры


CREATE EXCEPTION ORDER_ALREDY_SHIPPED "Order status is shipped.'?;
CREATE EXCEPTION CUSTOMER_ON_HOLD "This customer is on hold.";
CREATE EXCEPTION CUSTOMER_CHECK "Overdue balance -- can't ship.";
═════CREATE PROCEDURE SHIP_ORDER (PO_NUM СНAR(8))
═════AS
═════DECLARE VARIABLE ord_stat CHAR(7);
═════DECLARE VARIABLE hold_stat CHAR(l);
═════DECLARE VARIABLE cust_no INTEGER;
═════DECLARE VARIABLE any_po CHAR(8);
BEGIN
/* Сначала получим состояние заказа,
информацию о заказчике и его номер,
который будет использоваться для проверки
далее в процедуре. Эти значения сохраняются в
локальных переменных, определенные выше. */
SELECT s.order_status, c.on_hold, c.cust_no
FROM sales s, customer с
WHERE po_number = :po_num
AND s.cust_no = c.cust_no
INTO :ord_stat, :hold_stat, :cust_no;
/* Проверка, был ли заказ на товары
уже выполнен. Если это так, генерируется
исключительная ситуация и выполнение
процедуры останавливается. */
IF (ord_stat = "shipped") THEN
BEGIN
EXCEPTION order_already_shipped;
═════SUSPEND;
END
/* Проверим, не числится ли заказчик в должниках.
Если это так, генерируется исключительная
ситуация и выполнение процедуры останавливается. */
ELSE IF (hold_stat = "*") THEN
BEGIN
EXCEPTION customer_on_hold;
═════SUSPEND;
END
/* Если баланс поставленных более чем за
2 месяца заказов отрицательный, поместим
заказчика в список должников и сгенерируем
исключительную ситуацию, после чего остановим
выполнение процедуры. */
FOR SELECT po_number
FROM sales
WHERE cust_no = :cust_no
AND order_status = "shipped"
AND paid = "n"
AND ship_date < 'NOW - 60
INTO :any_po
═════DO
═════BEGIN
══════════EXCEPTION customer_check;
═════UPDATE customer
══════════SET on_hold = "*"
WHERE cust_no = :cust_no;
═════SUSPEND;
END
/* Если все проверки успешно выполнены,
выполнятся поставка заказа. */
UPDATE sales
SET order_status = "shipped", ship_date = 'NOW'
WHERE po_number = :po_num;
SUSPEND;
END



[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017