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

Redshift调用存储过程返回SELECT查询无结果目标错误如何解决

问题根因

  • plpgsql语法不允许直接执行无接收目标的SELECT语句,你当前写的SELECT查询没有将结果赋值给变量,也没有指定返回逻辑,所以触发SELECT query has no destination for result data报错。
  • 语法不兼容:你使用的TOP 10是SQL Server的语法,PostgreSQL中需要用LIMIT 10实现取前10行的逻辑。
  • 参数定义不匹配:你仅定义了单个VARCHAR类型的OUT参数,无法存储查询得到的10行结果。
  • 此前尝试的RETURN()仅适用于返回单个值的场景,无法满足多结果返回的需求。

解决方案

如果你的核心需求是返回查询得到的10行ColumnName结果,优先使用PostgreSQL函数实现,这是返回结果集的常规方案,可运行代码如下:

CREATE OR REPLACE FUNCTION SchemaName.SP_Testing_Creating_Procedure()
RETURNS SETOF VARCHAR(9)
AS $$  
BEGIN   
  RETURN QUERY
  SELECT ColumnName FROM SchemaName.TableName where ColumnName is not null LIMIT 10;
END;
$$
LANGUAGE plpgsql; 

-- 调用函数获取结果
SELECT * FROM SchemaName.SP_Testing_Creating_Procedure();

如果你必须使用存储过程实现,可以通过游标参数返回结果集,代码示例如下:

CREATE OR REPLACE PROCEDURE SchemaName.SP_Testing_Creating_Procedure (OUT result_cursor REFCURSOR) 
AS $$  
BEGIN   
  OPEN result_cursor FOR
  SELECT ColumnName FROM SchemaName.TableName where ColumnName is not null LIMIT 10;
END;
$$
LANGUAGE plpgsql; 

-- 存储过程调用方式(需要在事务中执行)
BEGIN;
CALL SchemaName.SP_Testing_Creating_Procedure('res_cursor');
FETCH ALL IN "res_cursor";
COMMIT;

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

相关产品推荐
方舟 Agent Plan

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

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