使用帶有輸出引數的儲存過程
使用帶有輸出引數的儲存過程
您可以呼叫的 SQL Server 儲存過程是返回一個或多個 OUT 引數的儲存過程,儲存過程使用這些引數將資料返回到呼叫它的應用程式。可以使用 Microsoft SQL Server 2005 JDBC Driver 提供的 SQLServerCallableStatement 類,呼叫此類儲存過程並處理其返回的資料。
使用 JDBC 驅動程式呼叫此類儲存過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 OUT 引數的 call 轉義序列的語法如下所示:
{call procedure-name[([parameter][,[parameter]]...)]}
注意:
有關 SQL 轉義序列的詳細資訊,請參閱使用 SQL 轉義序列。
構造 call 轉義序列時,請使用 ?(問號)字元來指定 OUT 引數。此字元充當要從該儲存過程返回的引數值的佔位符。要為 OUT 引數指定值,必須在執行儲存過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各引數的資料型別。
使用 registerOutParameter 方法為 OUT 引數指定的值必須是 java.sql.Types 所包含的 JDBC 資料型別之一,而它又被對映成本地 SQL Server 資料型別之一。有關 JDBC 和 SQL Server 資料型別的詳細資訊,請參閱瞭解 JDBC 驅動程式資料型別。
當您對於 OUT 引數向 registerOutParameter 方法傳遞一個值時,不僅必須指定要用於此引數的資料型別,而且必須在儲存過程中指定此引數的序號位置或此引數的名稱。例如,如果儲存過程包含單個 OUT 引數,則其序數值為 1;如果儲存過程包含兩個引數,則第一個序數值為 1,第二個序數值為 2。
注意:
JDBC 驅動程式不支援將 CURSOR、SQLVARIANT、TABLE 和 TIMESTAMP SQL Server 資料型別用作 OUT 引數。
作為例項,在 SQL Server 2005 AdventureWorks 示例資料庫中建立以下儲存過程:
複製程式碼
CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END
根據指定的整數 IN 引數 (employeeID),該儲存過程也返回單個整數 OUT 引數 (managerID)。根據 HumanResources.Employee 表中包含的 EmployeeID,OUT 引數中返回的值為 ManagerID。
在下面的例項中,將向此函式傳遞 AdventureWorks 示例資料庫的開啟連線,然後使用 execute 方法呼叫 GetImmediateManager 儲存過程:
複製程式碼
public static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt(1, 5);
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt(2));
}
catch (Exception e) {
e.printStackTrace();
}
}
本示例使用序號位置來標識引數。或者,也可以使用引數的名稱(而非其序號位置)來標識此引數。下面的程式碼示例修改了上一個示例,以說明如何在 Java 應用程式中使用命名引數。請注意,這些引數名稱對應於儲存過程的定義中的引數名稱:
複製程式碼
public static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt("employeeID", 5);
cstmt.registerOutParameter("managerID", java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt("managerID"));
cstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
注意:
這些示例使用 SQLServerCallableStatement 類的 execute 方法來執行儲存過程。使用此方法是因為儲存過程也不會返回結果集。如果返回,則使用 executeQuery 方法。
儲存過程可能返回更新計數和多個結果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規範,此規範規定在檢索 OUT 引數之前應檢索多個結果集和更新計數。也就是說,應用程式應先檢索所有 ResultSet 物件和更新計數,然後使用 CallableStatement.getter 方法檢索 OUT 引數。否則,當檢索 OUT 引數時,尚未檢索的 ResultSet 物件和更新計數將丟失。有關更新計數和多個結果集的詳細資訊,請參閱使用帶有更新計數的儲存過程和使用多個結果集。
您可以呼叫的 SQL Server 儲存過程是返回一個或多個 OUT 引數的儲存過程,儲存過程使用這些引數將資料返回到呼叫它的應用程式。可以使用 Microsoft SQL Server 2005 JDBC Driver 提供的 SQLServerCallableStatement 類,呼叫此類儲存過程並處理其返回的資料。
使用 JDBC 驅動程式呼叫此類儲存過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 OUT 引數的 call 轉義序列的語法如下所示:
{call procedure-name[([parameter][,[parameter]]...)]}
注意:
有關 SQL 轉義序列的詳細資訊,請參閱使用 SQL 轉義序列。
構造 call 轉義序列時,請使用 ?(問號)字元來指定 OUT 引數。此字元充當要從該儲存過程返回的引數值的佔位符。要為 OUT 引數指定值,必須在執行儲存過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各引數的資料型別。
使用 registerOutParameter 方法為 OUT 引數指定的值必須是 java.sql.Types 所包含的 JDBC 資料型別之一,而它又被對映成本地 SQL Server 資料型別之一。有關 JDBC 和 SQL Server 資料型別的詳細資訊,請參閱瞭解 JDBC 驅動程式資料型別。
當您對於 OUT 引數向 registerOutParameter 方法傳遞一個值時,不僅必須指定要用於此引數的資料型別,而且必須在儲存過程中指定此引數的序號位置或此引數的名稱。例如,如果儲存過程包含單個 OUT 引數,則其序數值為 1;如果儲存過程包含兩個引數,則第一個序數值為 1,第二個序數值為 2。
注意:
JDBC 驅動程式不支援將 CURSOR、SQLVARIANT、TABLE 和 TIMESTAMP SQL Server 資料型別用作 OUT 引數。
作為例項,在 SQL Server 2005 AdventureWorks 示例資料庫中建立以下儲存過程:
複製程式碼
CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END
根據指定的整數 IN 引數 (employeeID),該儲存過程也返回單個整數 OUT 引數 (managerID)。根據 HumanResources.Employee 表中包含的 EmployeeID,OUT 引數中返回的值為 ManagerID。
在下面的例項中,將向此函式傳遞 AdventureWorks 示例資料庫的開啟連線,然後使用 execute 方法呼叫 GetImmediateManager 儲存過程:
複製程式碼
public static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt(1, 5);
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt(2));
}
catch (Exception e) {
e.printStackTrace();
}
}
本示例使用序號位置來標識引數。或者,也可以使用引數的名稱(而非其序號位置)來標識此引數。下面的程式碼示例修改了上一個示例,以說明如何在 Java 應用程式中使用命名引數。請注意,這些引數名稱對應於儲存過程的定義中的引數名稱:
複製程式碼
public static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt("employeeID", 5);
cstmt.registerOutParameter("managerID", java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt("managerID"));
cstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
注意:
這些示例使用 SQLServerCallableStatement 類的 execute 方法來執行儲存過程。使用此方法是因為儲存過程也不會返回結果集。如果返回,則使用 executeQuery 方法。
儲存過程可能返回更新計數和多個結果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規範,此規範規定在檢索 OUT 引數之前應檢索多個結果集和更新計數。也就是說,應用程式應先檢索所有 ResultSet 物件和更新計數,然後使用 CallableStatement.getter 方法檢索 OUT 引數。否則,當檢索 OUT 引數時,尚未檢索的 ResultSet 物件和更新計數將丟失。有關更新計數和多個結果集的詳細資訊,請參閱使用帶有更新計數的儲存過程和使用多個結果集。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-609088/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 帶輸出引數的儲存過程儲存過程
- Oracle帶輸入輸出引數的儲存過程Oracle儲存過程
- Java呼叫儲存過程(帶輸出引數)Java儲存過程
- dos下呼叫帶輸出引數的儲存過程儲存過程
- C#中呼叫SQL儲存過程(帶輸入輸出引數的例子)C#SQL儲存過程
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- SQL Server-儲存過程(Procedure),帶入引數和出引數SQLServer儲存過程
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- .NET用使用儲存過程獲取輸出引數的程式碼示例!儲存過程
- 動態呼叫帶引數的儲存過程儲存過程
- 【ASP.NET開發】ADO.NET呼叫帶輸出引數的儲存過程ASP.NET儲存過程
- 在sqlplus中呼叫in out輸入輸出引數的儲存過程SQL儲存過程
- mysql儲存過程的引數MySql儲存過程
- SQLSERVER儲存過程如何寫帶引數的遊標SQLServer儲存過程
- tcbs_批量儲存過程_輸出引數out與異常的關係儲存過程
- 帶有儲存過程的組合查詢儲存過程
- 儲存過程的引數可以使用sql的函式儲存過程SQL函式
- 儲存過程輸入引數型別定義引起的問題儲存過程型別
- oracle procedure 儲存過程輸入及輸出in out示例Oracle儲存過程
- MySQL 儲存過程引數IN OUT INOUT對比MySql儲存過程
- oracle儲存過程將引數字串分割sqlOracle儲存過程字串SQL
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- 詳解MySQL儲存過程引數有三種型別(in、out、inout)MySql儲存過程型別
- 使用儲存過程儲存過程
- 造數儲存過程儲存過程
- oracle儲存過程procedure_輸入引數varchar2與char報錯Oracle儲存過程
- SQL Server系統儲存過程和引數示例SQLServer儲存過程
- jdbctemplate呼叫儲存過程傳遞陣列引數JDBC儲存過程陣列
- Mysql 儲存過程的使用MySql儲存過程
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- tcbs_批量儲存過程_輸入引數為空與非空的分支編寫儲存過程
- c#之帶有out輸出引數的方法定義及使用示例C#
- MySQL儲存過程in、out、inout引數示例與總結MySql儲存過程
- SQL Server系統儲存過程和引數總結SQLServer儲存過程
- 儲存過程單引號問題儲存過程
- LMT下表儲存引數的使用
- 簡單的造數儲存過程儲存過程
- oracle procedure儲存過程輸入引數用於sql like模糊匹配2演算法Oracle儲存過程SQL演算法