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

PostgreSQL调用plpgsql函数出现query has no destination for result data错误如何解决

错误原因

在PL/pgSQL的语法规则中,执行SELECT查询时必须为返回的结果指定存储目的地,否则PostgreSQL无法处理无去向的查询数据,就会抛出query has no destination for result data错误。
你代码中未做结果处理的两条查询语句是直接触发原因:

  • select 'werewwer';
  • select * from test_data where t_first_name='Shahbaz@gmail.com';
解决方案

根据你实际的业务需求选择对应修改方式即可:

方案1:不需要获取查询结果,仅需执行查询逻辑

直接将SELECT关键字替换为PL/pgSQL专属的PERFORM关键字即可,PERFORM的作用就是执行查询并主动丢弃返回结果,修改后的函数代码如下:

CREATE OR REPLACE FUNCTION public.tester01()
RETURNS text
LANGUAGE plpgsql
AS $function$
DECLARE
students text;
BEGIN
students:='success';
 PERFORM 'werewwer';
PERFORM * from test_data where t_first_name='Shahbaz@gmail.com';

RETURN students;

END;
$function$
;

修改后正常执行select tester01()即可得到返回值success。

方案2:需要获取查询结果做后续处理

使用SELECT ... INTO ...语法将查询结果赋值给提前声明的变量即可,示例如下(假设需要把test_data表的匹配行的某个text字段赋值给students变量):

CREATE OR REPLACE FUNCTION public.tester01()
RETURNS text
LANGUAGE plpgsql
AS $function$
DECLARE
students text;
BEGIN
-- 将查询结果赋值给students变量,添加LIMIT 1避免单值变量接收多行结果报错
SELECT t_column_name INTO students from test_data where t_first_name='Shahbaz@gmail.com' LIMIT 1;
-- 无匹配结果时设置默认值
IF students IS NULL THEN
  students := 'success';
END IF;

RETURN students;

END;
$function$
;

如果查询需要返回多行结果,需要调整函数返回值类型为SETOF 对应类型/表结构,配合RETURN NEXT/RETURN QUERY语法返回结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:39:00