[英]ERROR: column "num" does not exist Where: PL/pgSQL function bulletin_abbrege(integer) line 3 at SQL statement
CREATE OR REPLACE PROCEDURE bulletin_abbrege(in num INTEGER)
language plpgsql
AS $$
BEGIN
CREATE OR REPLACE VIEW bulletin_abrege AS
SELECT concat(substring(candidat_nom,1,1),substring(candidat_prenom,1,1)) as initiales,parti_abv as abbrevation_parti,compte_nom as compte_nom
FROM candidat INNER JOIN parti ON candidat.parti_id=parti.parti_id INNER JOIN compte ON candidat.compte_id=compte.compte_id
WHERE candidat.compte_id = num;
END;
$$;
[42703] 錯誤:列“num”不存在其中:PL/pgSQL function bulletin_abbrege(integer) line 3 at SQL 語句
我不明白為什么當它是在 function 中的 arguments 中傳遞的值時,它說該列不存在?
謝謝您的幫助
這是一個過程而不是 FUNCTION
從執行查詢:
不可優化的 SQL 命令(也稱為實用程序命令)無法接受查詢參數。 因此,PL/pgSQL 變量的自動替換在此類命令中不起作用。 要在從 PL/pgSQL 執行的實用程序命令中包含非常量文本,您必須將實用程序命令構建為字符串,然后執行它,如第 43.5.4 節所述。
嘗試類似:
CREATE OR REPLACE PROCEDURE bulletin_abbrege(in num INTEGER)
language plpgsql
AS $$
BEGIN
EXECUTE format('CREATE OR REPLACE VIEW bulletin_abrege AS
SELECT concat(substring(candidat_nom,1,1),substring(candidat_prenom,1,1)) as initiales,parti_abv as abbrevation_parti,compte_nom as compte_nom
FROM candidat INNER JOIN parti ON candidat.parti_id=parti.parti_id INNER JOIN compte ON candidat.compte_id=compte.compte_id
WHERE candidat.compte_id = %L', num);
END;
$$;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.