Dit is ontworpen. De handleiding geeft uitleg in het hoofdstuk Variabele vervanging :
Variabele vervanging werkt momenteel alleen in SELECT
, INSERT
, UPDATE
,en DELETE
commando's, omdat de hoofd-SQL-engine alleen in deze commando's queryparameters toestaat. Om een niet-constante naam of waarde te gebruiken in andere instructietypen (in het algemeen utility-instructies genoemd), moet u de utility-instructie als een tekenreeks construeren en EXECUTE
het.
Je kan niet parametriseer de waarde in een dynamisch statement met EXECUTE
ofwel omdat, onder verwijzing naar het hoofdstuk Dynamische commando's uitvoeren :
Een andere beperking op parametersymbolen is dat ze alleen werken inSELECT
, INSERT
, UPDATE
, en DELETE
commando's. In andere typen instructie (in het algemeen hulpprogramma-instructies genoemd), moet u tekstueel waarden invoegen, zelfs als het alleen gegevenswaarden zijn.
De enige optie in een plpgsql-functie is om de waarde samen te voegen in de opdrachtreeks. Je zou kunnen gebruiken format()
, maar voor het eenvoudige voorbeeld is eenvoudige aaneenschakeling veilig en gemakkelijk::
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
$$;
De schema-kwalificatie pg_temp.
maakt er een (ongedocumenteerde!) "tijdelijke" functie van, die de vraag weerspiegelt.
De handleiding over n_distinct
.