You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Go database/sql结合godror时Oracle ORA-56735超时无错误返回的问题咨询

Go database/sql结合godror时Oracle ORA-56735超时无错误返回的问题咨询

大家好,我最近在使用Go的database/sql搭配godror驱动操作Oracle数据库时,碰到了一个非常费解的问题,想请教下各位同行大佬。

环境信息

  • Go版本:1.24.6
  • godror驱动版本:v0.49.0
  • 数据库:Oracle,使用database/sqlDB.QueryContext方法(未设置显式上下文超时)

问题场景

我执行了一个耗时较长的查询,Oracle服务器端配置了执行时间限制,超时后服务器日志里明确记录了ORA-56735: elapsed time limit exceeded - call aborted,但我的Go应用却完全没收到这个错误提示。

核心代码片段如下:

ctx := context.Background() // 这里没有设置显式的上下文超时
rows, err := db.QueryContext(ctx, "SELECT /*+ some hints */ ...", namedParams...)
if err != nil {
    // 我原本预期这里会返回ORA-56735错误
    log.Fatalf("QueryContext error: %v", err)
}
defer rows.Close()

// 遍历结果集
for rows.Next() {
    // 这里没有任何行数据返回
}
// 检查遍历后的错误
if err := rows.Err(); err != nil {
    log.Fatalf("Rows iteration error: %v", err)
}

预期行为

我原本以为,要么QueryContext会直接返回ORA-56735错误,要么在调用rows.Next()或者最后调用rows.Err()的时候,能捕获到服务器端触发的这个超时终止错误。

实际发生的情况

Oracle服务器日志清晰显示已经触发了ORA-56735(执行时间超过限制,调用被终止),但我的应用里却是这样的表现:

  1. QueryContext成功返回了rows对象,完全没有报错
  2. 遍历rows的过程中没有得到任何行数据
  3. 最后调用rows.Err()返回的是nil

我的问题

有没有大佬遇到过类似的情况?这是不是database/sql结合godror驱动处理ORA-56735错误时的已知行为,或者是一个未修复的bug呢?

火山引擎 最新活动