Du har flere problemer, men den mest grundlæggende er, at du slet ikke skal gøre dette. At forsøge at gemme - og holde synkroniseret - en værdi, der altid kan beregnes, er en grundlæggende designfejl.
Nu til selve koden. Du har
SELECT SUM(VALUE) into product
Målet for din INTO skal være en erklæret variabel. Det ser ud til, at du prøver at VÆLGE .. I et kolonnenavn.
Du bør navngive lokale variabler for at skelne mellem dem og kolonnenavne. Altså i stedet for
DECLARE
value number;
amount number;
total number;
Du burde have
DECLARE
v_value number;
v_amount number;
v_total number;
Omvendt bør du tænke på standardnavnekonventioner for dine tabeller og kolonner. Til kolonner bruger og anbefaler jeg navne i form af
Endelig er det svært at anbefale kodningsændring uden at kende tabellerne. Du har givet en vag beskrivelse af dem, men bedre at lægge alt på bordet. Se minimal-reproducerbart-eksempel