微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。