Когда вы делаете это:
SELECT MAX (item_product_id), MAX (item_quantity_in_cart)
INTO ws_prod_id, ws_item_quantity_in_cart
FROM sc_items i
WHERE i.item_cart_id = cancel_card.cart_id_in;
Вы просто выбираете ОДИН (1) product => max (item_product_id)
Таким образом, это единственный обновленный продукт, и чтобы сделать вещихуже того, со временем он будет обновляться с помощью max (qty) из другого продукта ...
Вам нужен курсор продуктов корзины и для каждого продукта выполните необходимые обновления.
Триггеры неплохо или хорошо, но, как правило, я полностью согласен с комментарием Стивена Фюрштайна, вы должны избегать их.Но иногда вы не можете.
Возможно, дизайн бета-версии будет смешанным: - Создайте сохраненный процесс, который очищает корзину на основе идентификатора корзины - Вызовите эту процедуру из триггера (если вы действительно должны) или из-за пределов.(процесс управления корзиной) как лучший вариант.