Имате няколко проблема, но най-фундаменталният е, че изобщо не трябва да правите това. Опитът да се съхранява - и да се поддържа в синхрон - стойност, която винаги може да бъде изчислена, е основен дефект в дизайна.
Сега към самия код. Имате
SELECT SUM(VALUE) into product
Целта на вашия INTO трябва да бъде декларирана променлива. Изглежда, че се опитвате да SELECT .. INTO име на колона.
Трябва да наименувате локални променливи, за да разграничите имената на колоните между тях. Така вместо
DECLARE
value number;
amount number;
total number;
Трябваше да имаш
DECLARE
v_value number;
v_amount number;
v_total number;
Обратно, трябва да помислите за стандартни правила за именуване на вашите таблици и колони. За колони използвам и препоръчвам имена под формата на <прилагателно_съществително_>, следователно ORDER_ID, PRODUCT_NAME и т.н. Какво е това с PRODUCT_ID_PRODUCT, ORDER_ID_ORDER? Повтарянето на името на таблицата в имената на колоните обикновено не е от полза. Въпреки че има моменти, има смисъл, защото все още следва формата на прилагателно_съществително, като колоната id на таблицата ORDERS, която се нарича ORDER_ID. Помислете и за имената на таблиците, обикновено правя имената на таблиците си съществително в множествено число, защото таблиците проследяват множество екземпляри на някакъв обект. Ако името на таблицата има смисъл за име на колона (като ORDER_ID), то ще бъде единствено число, защото отделен ред проследява единичен екземпляр на обекта.
И накрая, трудно е да се препоръча промяна на кодирането, без да се познават таблиците. Дадохте неясно описание за тях, но по-добре да сложим всичко на масата. Вижте minimal-reproducible-example