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
相关产品推荐
相关产品推荐

