Squirrel SQL 编辑器不会从具有 3 个选择语句的存储过程返回多个结果

问题描述

我有一个在 Sybase 的 Squirrel SQL 编辑器中运行的存储过程。存储过程有3条select语句,但是执行时只返回第一个select语句的结果。

我尝试过的:使用 Java SQL API 执行存储过程。我看到了同样的行为。此外,在 Toad for Sybase 中执行相同的存储过程并看到相同的行为。

我们公司为旧版 C++ 应用程序使用了 3rd 方数据库执行工具。该库按预期返回所有 3 个结果集。由于某种原因,我们正在删除此库。

解决方法

使用 CallableStatement#execute() 执行返回多个 ResultSet 的存储过程。

它返回一个布尔值。

If true : 如果当前结果是一个 ResultSet If false : 当前结果是一个 UpdateCount

什么是更新计数? 当您在 SQL 编辑器中执行存储过程时,您会在控制台中获得一些信息,例如“4 行受影响”。此消息称为 UpdateCount。

数据库在对 API 的响应中返回这些消息以及结果集。

遍历返回的结果。

    boolean hasResults = stmt.execute();
    
    while(true) {
      if(hasResults) {
          //Has results is true if Current result is ResultSet
        //Add code here to parse your result values 
      } else {
          if(stmt.getUpdateCount() == -1) break; // you have reached the end of all data (updatecount + resultset)
    }
    hasResults = stmt.getMoreResults(); // GetMoreResults return true if the next result is ResultSet else it returns false if its updatecount.
}

如果您不希望 UpdateCounts 作为数据库结果的一部分返回,您可以在存储过程中包含语句 SET NOCOUNT ON

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...