Vyzkoušeli jste nestandardní UPDATE .. FROM
Postgresu doložka? Myslím, že by to fungovalo
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
Všimněte si, že vynucuji genid()
být volán přesně jednou na záznam v mytable
v rámci podvýběru. Pak se sám připojuji k mytable
a gen
pomocí hypotetického id
Dokumentaci naleznete zde:
http://www.postgresql.org/docs/current/interactive /sql-update.html
Zdá se však, že to bylo zavedeno pouze s Postgres 9.0. Pokud se vám to zdá příliš komplikované (tj. nepříliš čitelné), stále se můžete uchýlit k pgplsql jako uživatel Florin navrhl zde
.