Nie potrzebujesz do tego pętli ani nawet funkcji.
To, co chcesz zrobić, można zrobić w jednej instrukcji aktualizacji, ponieważ całkowitą liczbę na terytorium można obliczyć za pomocą jednej agregacji:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Można to następnie wykorzystać jako źródło do aktualizacji tabeli terytorium:
UPDATE territory2_t
SET total_sales_person = t.total_count
FROM (
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
) t
WHERE territoryid = t.salesterritoryid;
Alternatywą, która może być łatwiejsza do zrozumienia, ale będzie wolniejsza w przypadku większych tabel, jest aktualizacja z powiązanym podzapytaniem
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Istnieje niewielka różnica między pierwszą a drugą aktualizacją:druga zaktualizuje total_sales_person do 0
(zero) dla terytoriów, na których w ogóle nie ma sprzedawcy. Pierwszy z nich zaktualizuje tylko liczbę dla terytoriów, które są faktycznie obecne w tabeli sprzedawcy.