[英]How to handle two stored procedures, one returning a single value and the other returning rows?
我正在使用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查詢的過程。
我必須在一個程序中處理它們。 如何在運行時確定過程是返回值還是一組行?
PS:我不能使用OUT參數。
CallableStatement
對象的.execute()
方法返回一個布爾值,該布爾值指示返回的(第一個)結果是否為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一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.