Ini adalah dengan desain. Manual menjelaskan dalam bab Pergantian Variabel :
Substitusi variabel saat ini hanya berfungsi di
SELECT
,INSERT
,UPDATE
, danDELETE
perintah, karena mesin SQL utama mengizinkan parameter kueri hanya dalam perintah ini. Untuk menggunakan nama atau nilai non-konstan dalam jenis pernyataan lain (umumnya disebut pernyataan utilitas), Anda harus membuat pernyataan utilitas sebagai string danEXECUTE
itu.
Anda tidak bisa membuat parameter nilai dalam pernyataan dinamis dengan EXECUTE
baik karena, mengutip bab Melaksanakan Perintah Dinamis :
Pembatasan lain pada simbol parameter adalah mereka hanya berfungsi di
SELECT
,INSERT
,UPDATE
, danDELETE
perintah. Dalam jenis pernyataan lain (umumnya disebut pernyataan utilitas), Anda harus memasukkan nilai secara tekstual meskipun itu hanya nilai data.
satu-satunya opsi dalam fungsi plpgsql adalah untuk menggabungkan nilai ke dalam string perintah. Anda dapat menggunakan format()
, tetapi untuk contoh sederhana, penggabungan biasa aman dan mudah::
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
$$;
Kualifikasi skema pg_temp.
menjadikannya sebagai fungsi "sementara" (tidak berdokumen!), mencerminkan pertanyaan.
Manual tentang n_distinct
.