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

使用Ktor与Exposed ORM执行WITH查询时遇预期无结果却返回结果错误

解决Exposed中执行WITH查询时的PSQLException错误

问题场景

使用Kotlin、Ktor与Exposed ORM编写DAO层代码时,执行包含WITH子句的SQL查询触发如下错误:

org.postgresql.util.PSQLException: A result was returned when none was expected

相关代码片段:

val query = "WITH temporaryTable (averageValue) as (SELECT avg(Attr1) ....;"
transaction {
    exec(query) {
        while (it.next()) {
            // 结果处理逻辑
        }
    }
}

普通SELECT查询用该方式执行正常,但带WITH的查询会报错。

解决方案

Exposed的exec方法默认用于执行不返回结果集的SQL操作(如INSERT、UPDATE、DELETE),而你的WITH查询属于需要返回结果的查询类型,需改用execAndFetch方法,它专门用于处理需要获取结果集的SQL语句。

修改后的代码:

// 确保WITH语句末尾包含实际的SELECT查询,以输出临时表结果
val query = "WITH temporaryTable (averageValue) as (SELECT avg(Attr1) ....) SELECT * FROM temporaryTable;"
transaction {
    execAndFetch(query) { rs ->
        while (rs.next()) {
            // 处理结果逻辑
        }
    }
}

额外注意:WITH子句定义临时表后,必须通过后续的SELECT语句来读取临时表数据,否则即使更换方法也无法正确获取结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:35:23