как проверить строку до и после обновления - PullRequest
1 голос
/ 07 апреля 2019

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

Вкратце, «функция, процедура для проверки количества в наличии перед вставкой строки в таблицу order_line и для обновления также количества в наличии инвентаря таблицы»

CREATE OR REPLACE PACKAGE order_package IS
          global_inv_id NUMBER (6);
          global_quantity NUMBER (6);
    PROCEDURE create_new_order(current_c_id NUMBER,
 current_meth_pmt VARCHAR2, current_os_id NUMBER);
   PROCEDURE create_new_order_line(current_o_id NUMBER);
       END;
        /


CREATE OR REPLACE PACKAGE BODY order_package IS

    PROCEDURE create_new_order(current_c_id NUMBER,
 current_meth_pmt VARCHAR2, current_os_id NUMBER) AS
         current_o_id NUMBER;
       BEGIN
         SELECT order_seq.NEXTVAL
         INTO  current_o_id
         FROM   dual;
           INSERT INTO orders
     VALUES(current_o_id, sysdate,current_meth_pmt, current_c_id,
       current_os_id);
          COMMIT;
       create_new_order_line(current_o_id);
       END create_new_order;
   PROCEDURE create_new_order_line(current_o_id NUMBER)AS
       BEGIN
       INSERT INTO order_line
    VALUES(current_o_id,global_inv_id, global_quantity);
         COMMIT;
        END create_new_order_line;
       END;
        /

1 Ответ

1 голос
/ 07 апреля 2019

Вы не показываете свою таблицу инвентаризации, и ваши процедуры, кажется, не имеют заказанного количества количества, так что отчасти это гипотеза. Возможно, вы захотите сначала обновить эту таблицу и использовать предложение RETURNING INTO для получения обновленного инвентаря.

UPDATE inventory SET global_quantity = global_quantity - order_quantity
 WHERE global_inv_id = current_c_id
RETURNING global_quantity INTO l_global_quantity;

IF l_global_quantity < 0 THEN
    ROLLBACK;
    raise_application_error( -20001, 'You ordered too much!' );
ELSE
    [... create order goes here ...]
END IF;

Является ли current_c_id заказанным товаром? Это вызовет исключение, которое должно быть перехвачено тем, что вызывает вашу процедуру. Способ отображения ошибки пользователю будет зависеть от используемого прикладного уровня.

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