Nemůžete DECLARE
(globální) proměnné (existují zástupná řešení
) ani smyčka s prostým SQL – s výjimkou rekurzivních CTE poskytovaných @bma
(což je ve skutečnosti iterace přes řádky, ne ve smyčce, přísně vzato).
Nicméně , existuje DO
prohlášení
pro takový procesní kodex ad hoc. Představeno s Postgres 9.0. Funguje jako jednorázová funkce, ale nebere žádné parametry a nic nevrací. Můžete RAISE
notes et al, takže váš příklad by fungoval dobře:
DO
$do$
DECLARE
_counter int := 0;
BEGIN
WHILE _counter < 10
LOOP
_counter := _counter + 1;
RAISE NOTICE 'The counter is %', _counter; -- coerced to text automatically
END LOOP;
END
$do$
Pokud není uvedeno jinak, výchozí jazyk v těle je plpgsql
. Můžete použít jakýkoli registrovaný procesní jazyk
pokud to však deklarujete (jako:LANGUAGE plpython
).
Postgres také nabízí generate_series()
generovat množiny ad-hoc, což může v mnoha případech odstranit potřebu smyčkování. Zkuste příklady vyhledat zde na SO.
Můžete také použít WHERE
klauzule v CTE upravující data
v prostém SQL pro rozvětvení případů a emulaci IF .. THEN .. ELSE .. END
...