共用方式為


使用含傳回狀態的預存程序

您可以呼叫的 SQL Server 預存程序是會傳回狀態或結果參數的預存程序。這通常用來指出預存程序的成功或失敗。Microsoft SQL Server 2005 JDBC Driver 提供 SQLServerCallableStatement 類別,您可以使用此類別,呼叫此種預存程序並處理其傳回的資料。

當您使用 JDBC 驅動程式來呼叫此種預存程序時,您必須使用 call SQL 逸出序列來搭配 SQLServerConnection 類別的 prepareCall 方法。含有傳回狀態參數的 call 逸出序列的語法如下:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}

注意

如需 SQL 逸出序列的詳細資訊,請參閱<使用 SQL 逸出序列>。

當您建構call逸出序列時,請使用 ? (問號) 字元來指定傳回狀態參數。此字元會充當預留位置,代表將從預存程序傳回的參數值。若要指定傳回狀態參數的值,在執行預存程序之前,您必須使用 SQLServerCallableStatement 類別的 registerOutParameter 方法來指定參數的資料類型。

注意

使用 JDBC 驅動程式與 SQL Server 資料庫時,您在 registerOutParameter 方法中指定給傳回狀態參數的值一律為整數,您可以使用 java.sql.Types.INTEGER 資料類型來指定此整數。

此外,當您將值傳送到傳回狀態參數的 registerOutParameter 方法時,您不只要指定使用於參數的資料類型,還要指定參數在預存程序中的序數位置。以傳回狀態參數而言,其序數位置一律為 1,因為它一律為預存程序呼叫中的第一個參數。雖然 SQLServerCallableStatement 類別提供使用參數的名稱表示特定參數的支援,但是您僅能將參數的序數位置號碼用於傳回狀態參數。

例如,在 SQL Server 2005 AdventureWorks 範例資料庫中建立下列預存程序:

CREATE PROCEDURE CheckContactCity
   (@cityName CHAR(50))
AS
BEGIN
   IF ((SELECT COUNT(*)
   FROM Person.Address
   WHERE City = @cityName) > 1)
   RETURN 1
ELSE
   RETURN 0
END

此預存程序傳回狀態值 1 或 0,視 cityName 參數中指定的城市是否可在 Person.Address 資料表中找到而定。

在下列範例中,連至 AdventureWorks 範例資料庫的開啟連接會傳遞至函數中,並使用 execute 方法來呼叫 CheckContactCity 預存程序:

public static void executeStoredProcedure(Connection con) {
   try {
      CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
      cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
      cstmt.setString(2, "Atlanta");
      cstmt.execute();
      System.out.println("RETURN STATUS: " + cstmt.getInt(1));
   }
   cstmt.close();
   catch (Exception e) {
      e.printStackTrace();
   }
}

另請參閱

其他資源

搭配預存程序使用陳述式