簡體   English   中英

錯誤:列“num”不存在其中:PL/pgSQL function bulletin_abbrege(integer) line 3 at SQL 語句

[英]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 中傳遞的值時,它說該列不存在?

謝謝您的幫助

  1. 這是一個過程而不是 FUNCTION

  2. 從執行查詢:

不可優化的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM