簡體   English   中英

如何處理兩個存儲過程,一個存儲過程返回一個值,另一個存儲過程返回行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM