Sie haben mehrere Probleme, aber das grundlegendste ist, dass Sie dies überhaupt nicht tun sollten. Der Versuch, einen Wert zu speichern und synchron zu halten, der immer berechnet werden kann, ist ein grundlegender Designfehler.
Nun zum Code selbst. Du hast
SELECT SUM(VALUE) into product
Das Ziel Ihres INTO muss eine deklarierte Variable sein. Sieht so aus, als ob Sie versuchen, SELECT .. INTO einen Spaltennamen.
Sie sollten lokale Variablen benennen, um zwischen ihnen und Spaltennamen zu unterscheiden. Also statt
DECLARE
value number;
amount number;
total number;
Das solltest du haben
DECLARE
v_value number;
v_amount number;
v_total number;
Umgekehrt sollten Sie über einheitliche Namenskonventionen für Ihre Tabellen und Spalten nachdenken. Für Spalten verwende und empfehle ich Namen in Form von
Schließlich ist es schwierig, eine Codierungsänderung zu empfehlen, ohne die Tabellen zu kennen. Sie haben sie nur vage beschrieben, aber besser alles auf den Tisch legen. Siehe minimal-reproducible-example