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

调用含refcursor的Redshift存储过程出现行与表头数量不匹配报错

问题分析与解决方案

报错Number of cells in the row (0) does not match number of headers (1)并非存储过程代码语法错误,大概率是AWS Redshift Query Editor v2对refcursor类型返回值的解析逻辑导致的兼容性问题。

解决办法

1. 使用psql客户端执行调用

Redshift官方psql客户端对refcursor的处理更贴合PostgreSQL标准行为,操作步骤如下:

  • 通过psql连接到你的Redshift集群
  • 执行以下SQL语句:
BEGIN;
CALL get_result_set('mycursor');
FETCH ALL FROM mycursor;
COMMIT;

此方式可正常返回sales表的结果集。

2. 改用直接返回结果集的存储过程写法

若无需显式使用游标,可修改存储过程,直接返回查询结果,适配Query Editor v2:

CREATE OR REPLACE PROCEDURE get_result_set()
AS $$
BEGIN
  SELECT * FROM sales;
END;
$$ LANGUAGE plpgsql;

调用时执行CALL get_result_set();即可直接获取数据。

3. 调整Query Editor v2中的调用语法

若必须在Query Editor v2中使用refcursor,尝试通过声明游标变量的方式调用:

DECLARE mycursor refcursor;
BEGIN;
CALL get_result_set(mycursor);
FETCH ALL FROM mycursor;
COMMIT;

部分场景下可规避工具的元数据解析错误。

额外验证

  • 确认执行存储过程的用户拥有sales表的SELECT权限及存储过程的EXECUTE权限
  • 再次确认sales表存在列及数据(你已完成此验证)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:07:33