У меня есть групповой проект, в котором мы создаем приложение для корзины покупок. Я получил некоторую обратную связь и исправил ее, превратив в процедуру с курсором. Тем не менее, мы все еще получаем ошибки, которые я не знаю, как исправить, такие как попытка поместить нулевое значение в столбец таблицы, который не может быть нулевым. Я не знаю, почему он думает, что я пытаюсь ввести нулевое значение. Наш проект уже завтра, поэтому, пожалуйста, помогите!
Сначала я попробовал использовать его как триггер, но он не работал, поэтому мне предложили превратить его в процедуру с курсором.
create or replace PROCEDURE CANCELCART (arg_cart_id IN number)
IS
ws_prod_id number;
ws_item_quantity_in_cart number;
ws_cart_id number;
ws_cart_status char;
cursor cancel IS
select item_product_id, item_quantity_in_cart
FROM sc_items i
WHERE item_cart_id = arg_cart_id
group by item_product_id;
alreadycancelled exception;
BEGIN
select max(cart_id) into ws_cart_id
from sc_cart
where arg_cart_id = cart_id;
/*cart check*/
select max(cart_status) into ws_cart_status
from sc_cart
where arg_cart_id = cart_id;
if ws_cart_id is null
then raise alreadycancelled;
end if;
open cancel;
LOOP
fetch cancel into ws_prod_id, ws_item_quantity_in_cart;
UPDATE sc_product p SET prod_quan_avail = prod_quan_avail + ws_quantity_in_cart,
prod_quan_sold = prod_quan_sold - ws_quantity_in_cart
WHERE prod_id = ws_prod_id;
DELETE FROM sc_items i WHERE i.item_cart_id = arg_cart_id;
END LOOP;
close cancel;
DELETE FROM sc_cart c WHERE c.cart_id = arg_cart_id;
EXCEPTION
when alreadycancelled
then raise_application_error(-20400, 'Cart does not exist');
END;
Мне нужен этот код для отмены корзины покупок и возврата всех количеств товара обратно на исходный запас.