Share via


반환 상태가 있는 저장 프로시저 사용

호출할 수 있는 SQL Server 저장 프로시저는 상태 또는 결과 및 매개 변수를 반환하는 프로시저입니다. 이러한 매개 변수는 대개 저장 프로시저의 성공 또는 실패를 나타내는 데 사용됩니다. Microsoft SQL Server JDBC 드라이버는 이러한 종류의 저장 프로시저를 호출하여 반환되는 데이터를 처리하는 데 사용할 수 있는 SQLServerCallableStatement 클래스를 제공합니다.

JDBC 드라이버를 사용하여 이러한 종류의 저장 프로시저를 호출하는 경우에는 call SQL 이스케이프 시퀀스와 함께 SQLServerConnection 클래스의 prepareCall 메서드를 사용해야 합니다. 반환 상태 매개 변수가 있는 call 이스케이프 시퀀스의 구문은 다음과 같습니다.

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

참고

SQL 이스케이프 시퀀스에 대한 자세한 내용은 SQL 이스케이프 시퀀스 사용을 참조하십시오.

call 이스케이프 시퀀스를 만드는 경우 물음표(?) 문자를 사용하여 반환 상태 매개 변수를 지정합니다. 이 문자는 저장 프로시저에서 반환될 매개 변수 값에 대한 자리 표시자로 사용됩니다. 반환 상태 매개 변수에 대한 값을 지정하려면 저장 프로시저를 실행하기 전에 SQLServerCallableStatement 클래스의 registerOutParameter 메서드를 사용하여 매개 변수의 데이터 형식을 지정해야 합니다.

참고

SQL Server 데이터베이스에서 JDBC 드라이버를 사용하는 경우 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

이 저장 프로시저에서는 cityName 매개 변수에 지정된 도시가 Person.Address 테이블에 있는지 여부에 따라 1 또는 0의 상태 값을 반환합니다.

다음 예제에서는 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();
   }
}

참고

관련 자료

저장 프로시저가 있는 문 사용