PL / SQL, который вы опубликовали, недействителен. Я думаю, вы хотели опубликовать это:
declare
cust customer;
begin
select treat(value(c) as customer) into cust from customer_table c where id=123;
cust.add_points(100);
end;
т.е. «cust» не «c» в строке 5?
Если это так, все, что вы там сделали, обновило значение баллов в переменной cust , а не в таблице. Вы можете видеть это так:
declare
cust customer;
begin
select treat(value(c) as customer) into cust from customer_table c where id=123;
cust.add_points(100);
dbms_output.put_line(cust.points);
end;
Выход:
110
Для обновления данных в таблице действительно требуется оператор UPDATE.