Czy wypróbowałeś niestandardowy UPDATE .. FROM
Postgresa? klauzula? Wyobrażam sobie, że to zadziała
update mytable
set a = first_part(gen.id),
b = second_part(gen.id),
c = third_path(gen.id)
from (
select genid() as genid, id
from mytable
where package_id = 10
) gen
where mytable.id = gen.id;
--and package_id = 10 -- This predicate is no longer necessary as the subquery
-- already filters on package_id, as Erwin mentioned
Zauważ, że wymuszam genid()
być wywoływana dokładnie raz na rekord w mytable
w ramach podselekcji. Następnie dołączam do mytable
i gen
za pomocą hipotetycznego id
kolumna. Zobacz dokumentację tutaj:
http://www.postgresql.org/docs/current/interactive /sql-update.html
Wydaje się, że zostało to wprowadzone tylko w Postgresie 9.0. Jeśli wydaje się to zbyt skomplikowane (tj. niezbyt czytelne), nadal możesz skorzystać z pgplsql jako użytkownik Sugerowany tutaj Florin
.