繁体   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