You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用PostgreSQL返回void的PL/pgSQL函数时出现near "Perform"语法错误

PostgreSQL返回void的PL/pgSQL函数正确调用方案

报错原因说明

  • 执行perform public.perform1(123)语法报错:PERFORM是PL/pgSQL专属关键字,仅能在$$包裹的PL/pgSQL代码块内部使用,直接在SQL交互环境(pgAdmin、SQL Shell的顶层输入)执行时,SQL解析器不识别该关键字,因此触发语法错误。
  • 执行SELECT public.perform1(123)提示无结果接收目标:这个报错只会出现在PL/pgSQL代码块内部执行SELECT语句的场景,PL/pgSQL要求所有SELECT语句的结果必须赋值给变量,不需要保留结果时就需要用PERFORM替代SELECT。

正确调用方式

场景1:在SQL交互环境直接调用

直接执行SELECT语句即可,返回的空结果集不会影响功能执行:

SELECT public.perform1(123);

如果需要显式忽略返回结果,也可以用以下写法:

SELECT * FROM public.perform1(123);

场景2:在PL/pgSQL代码块内部调用

替换为PERFORM关键字调用:

-- 示例:匿名块中调用
DO $$
BEGIN
    PERFORM public.perform1(123);
END
$$;

替代方案(更推荐)

如果函数不需要返回值,建议改写为PostgreSQL 11及以上版本支持的存储过程,调用逻辑更统一:

-- 改写为存储过程
create procedure public.perform1(myid integer)
language 'plpgsql'
volatile security definer
as $$
begin
    delete from tbl where tblid=myid;
end;
$$;

-- 调用方式(交互环境、PL/pgSQL内部都适用)
CALL public.perform1(123);

内容的提问来源于stack exchange,提问作者Jeb50

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:27:02