状態の戻り値があるストアド プロシージャの使用
呼び出すことができる SQL Server ストアド プロシージャは、状態パラメーターまたは結果パラメーターを返すプロシージャです。 この状態は一般的に、ストアド プロシージャの成功または失敗を示すために使用されます。 Microsoft JDBC Driver for SQL Server が提供する SQLServerCallableStatement クラスを使用することで、この種類のストアド プロシージャを呼び出し、返されるデータを処理することができます。
JDBC ドライバーを使用してこの種類のストアド プロシージャを呼び出す場合は、call
SQL エスケープ シーケンスを、SQLServerConnection クラスの prepareCall メソッドと組み合わせて使用する必要があります。 状態の戻り値パラメーターを持つ call
エスケープ シーケンスの構文は次のとおりです。
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
注意
SQL エスケープ シーケンスの詳細については、「SQL エスケープ シーケンスの使用」を参照してください。
call
エスケープ シーケンスを作成するとき、状態の戻り値パラメーターは ?
(疑問符) 文字を利用して指定します。 この文字は、ストアド プロシージャから返されるパラメーター値のプレースホルダーになります。 状態の戻り値パラメーターの値を指定するには、ストアド プロシージャを実行する前に、SQLServerCallableStatement クラスの registerOutParameter メソッドを使用して、各パラメーターのデータ型を指定する必要があります。
Note
SQL Server のデータベースと合わせて JDBC ドライバーを使用する場合、registerOutParameter メソッドで状態の戻り値パラメーターに対して指定した値は、常に整数になります。この値は、java.sql.Types.INTEGER データ型を使用して指定できます。
さらに、registerOutParameter メソッドに状態の戻り値パラメーターの値を渡す場合は、パラメーターに使用するデータ型だけでなく、ストアド プロシージャの呼び出しにおいてパラメーターの順序も指定する必要があります。 状態の戻り値パラメーターは、ストアド プロシージャの呼び出しにおいて常に最初のパラメーターであるため、位置を示す序数は常に 1 になります。 SQLServerCallableStatement クラスでは、パラメーター名を使用したパラメーター指定がサポートされていますが、状態の戻り値パラメーターに使用できるのは、パラメーターの序数位置番号だけです。
例として、AdventureWorks2022 サンプル データベースで次のストアド プロシージャを作成します。
CREATE PROCEDURE CheckContactCity
(@cityName CHAR(50))
AS
BEGIN
IF ((SELECT COUNT(*)
FROM Person.Address
WHERE City = @cityName) > 1)
RETURN 1
ELSE
RETURN 0
END
このストアド プロシージャでは、cityName パラメーターで指定された都市名が Person.Address テーブルに存在するかどうかによって、1 または 0 の状態値が返されます。
次の例の関数は、AdventureWorks2022 サンプル データベースに対して開かれた接続を渡され、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));
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示