2016-04-21 62 views
0

我正在使用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參數。

+0

java代碼在哪裏? – Patrick

+0

我正在研究java代碼..我知道如何處理在不同的程序中,但是我應該給出什麼樣的條件來確定什麼樣的輸出存儲過程給@Patrick –

回答

1

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。

+0

其實我無法註冊OUT參數。我們可以不註冊任何OUT參數嗎? –

相關問題