Ingres数据库CTE查询执行失败求助:返回结果集错误
Ingres CTE查询报错(Error: Query or Procedure returns a result set)解决方法
你的CTE查询语法本身是正确的,报错Error : Query or Procedure returns a result set(SQLState: 21000,ErrorCode :802840)通常是因为执行环境不允许直接返回结果集,以下是针对性解决步骤:
可能原因及解决办法
1. 在存储过程中执行该查询
Ingres不允许存储过程直接执行SELECT语句返回结果集,必须通过游标处理结果,或把结果插入临时表再返回:
示例代码(用游标处理):
CREATE PROCEDURE get_distinct_emails() AS DECLARE email_var VARCHAR(255); CURSOR c1 IS WITH sample_cte(email) AS( SELECT DISTINCT email_address AS email FROM table1 ) SELECT email FROM sample_cte; BEGIN OPEN c1; FETCH c1 INTO email_var; WHILE SQLCODE = 0 LOOP DBMS_OUTPUT.PUT_LINE(email_var); -- 输出结果,或根据需求处理 FETCH c1 INTO email_var; END LOOP; CLOSE c1; END;
2. 使用的Ingres版本不支持CTE
如果你的Ingres版本低于10,WITH子句(CTE)未被支持,改用子查询替代:
SELECT email FROM ( SELECT DISTINCT email_address AS email FROM table1 ) AS sample_cte;
3. 客户端工具/API连接设置问题
- 若在Ingres SQL Terminal等工具中执行,检查工具是否开启了结果集返回选项;
- 若通过API调用执行,确保调用方式支持接收返回的结果集(比如调整API参数,允许处理结果集输出)。
内容的提问来源于stack exchange,提问作者vmb
相关产品推荐
相关产品推荐

