Wątek przeniesiony 2023-02-21 13:34 z Java przez ŁF.

Update rekordów w pętli

0

Cześć, mam zapytanie obliczające checksumę w funkcji, której uzywam w trigerze.

CREATE OR REPLACE FUNCTION calculate_language_version_checksum() RETURNS trigger
LANGUAGE plpgsql AS '
BEGIN
UPDATE language_versions lv SET checksum =
(select
MD5(cast((array_agg(inv.name || t.message order by t.id)) as text))
from invariants inv
left join translations t on t.invariant_id = inv.id and lv.id = NEW.language_version_id)
WHERE lv.id = NEW.language_version_id;
RETURN NEW;
END
'

Chciałbym użyć tego samego zapytania, żeby wykonało się dla wszystkich rekordów gdzie checksuma jest równa null. Potrzebuje przejść po wszystkich reokordach, więc chyba potrzebowałbym użyć go w jakiejs funkcji oraz w pętli, jak mogę to zrobić ?

2

Tak?

UPDATE language_versions lv SET checksum =
            (select
            MD5(cast((array_agg(inv.name || t.message order by t.id)) as text))
            from invariants inv
            left join translations t on t.invariant_id = inv.id)
            WHERE checksum is null;

Tu masz chyba jakiś błąd:
screenshot-20230221133907.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1