Toto je záměrné. Návod vysvětluje v kapitole Proměnná substituce :
Substituce proměnných aktuálně funguje pouze v
SELECT
,INSERT
,UPDATE
aDELETE
příkazy, protože hlavní SQL engine umožňuje parametry dotazu pouze v těchto příkazech. Chcete-li použít nekonstantní název nebo hodnotu v jiných typech příkazů (obecně nazývaných příkazy nástroje), musíte příkaz nástroje vytvořit jako řetězec aEXECUTE
to.
Nemůžete parametrizujte hodnotu v dynamickém příkazu pomocí EXECUTE
buď proto, cituji kapitolu Provádění dynamických příkazů :
Dalším omezením symbolů parametrů je, že fungují pouze v
SELECT
,INSERT
,UPDATE
aDELETE
příkazy. V jiných typech příkazů (obecně nazývaných příkazy utility) musíte hodnoty vkládat textově, i když jsou to pouze datové hodnoty.
Jediná možnost ve funkci plpgsql je zřetězení hodnoty do příkazového řetězce. Můžete použít format()
, ale pro jednoduchý příklad je jednoduché zřetězení bezpečné a snadné::
CREATE OR REPLACE FUNCTION pg_temp.setdistinct(_cnt real)
RETURNS void
LANGUAGE plpgsql AS
$$
BEGIN
EXECUTE 'ALTER TABLE _temp ALTER COLUMN id SET (n_distinct=' || _cnt || ')';
END
$$;
Kvalifikace schématu pg_temp.
dělá z toho (nedokumentovanou!) "dočasnou" funkci, která zrcadlí otázku.
Příručka o n_distinct
.