我正在使用 Sybase 数据库。
假设我有一个像...这样的查询
CREATE PROCEDURE dbo.procedureA (
@a int
)
as
begin
IF EXISTS (SELECT 1 FROM dbo.T WHERE a = @a)
return 1
ELSE
return -1
end
...以及另一个包含返回多行的简单 SELECT 查询的过程。
我必须在一个程序中处理它们。如何在运行时确定该过程是返回一个值还是一组行?
P.S: 我无法使用 OUT 参数。
最佳答案
CallableStatement
对象的 .execute()
方法返回一个 boolean 值,指示返回的(第一个)结果是否为 ResultSet
。您可以使用该值来确定存储过程是否返回 ResultSet
,然后获取 RETURN
值(如果有),如下所示:
try (CallableStatement s = conn.prepareCall("{ ? = CALL dbo.test3 (?) }")) {
s.registerOutParameter(1, Types.INTEGER);
s.setInt(2, 3); // set input parameter to value 3, for example
if (s.execute()) {
// .execute() returned true, so we have a ResultSet
System.out.println("ResultSet values:");
try (ResultSet rs = s.getResultSet()) {
while (rs.next()) {
System.out.println(rs.getInt(1));
}
}
System.out.println("");
}
// get RETURN value (or zero if no RETURN statement in stored procedure)
System.out.printf("RETURN value: %d%n", s.getInt(1));
}
我没有可用于测试的 Sybase 数据库,但我验证了它可以与 jTDS 和 SQL Server 配合使用。
关于java - 如何处理两个存储过程,一个返回单个值,另一个返回行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36764304/