如何解决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 举报,一经查实,本站将立刻删除。