728x90

# 프로시저

- 데이터베이스 안의 프로시저에 저장하여 정의

- 프로시저는 while , repeat , if-then-else , for 반복문, case문 사용 가능

- call 구문을 통해 호출됨

- in 은 입력 받을 값을 저장하고 있는 매개변수

- out 은 결과 값을 반환하기 위해 프로시저 안에서 값이 지정될 매개변수

- 매개변수의 수가 다르면 같은 이름을 가진 여러 개의 프로시저들을 허용

 

 

# SQL 프로시저

- dept_count 함수를 프로시저로

  create procedure dept_count_proc (in dept_name varchar(20),
                                      out d_count integer)
  begin
     select count(*) into d_count  
     from instructor  
     where instructor.dept_name = dept_count_proc.dept_name
  end

 

- 프로시저 사용

  call 구문을 통해 호출됨

      declare d_count integer;

      call dept_count_proc( ‘Physics’, d_count);

- JDBC와 같은 동적 SQL로부터 호출 가능

 

 

# 파라미터가 없는 프로시저 Statement 객체

1. SQL

CREATE PROCEDURE GetContactFormalNames AS
BEGIN
       SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
       FROM Person.Contact
END

2. JDBC

public static void executeSprocNoParams(Connection con) { 
  try { 
	Statement stmt = con.createStatement(); 
	ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}"); 
	while (rs.next()) { 
		System.out.println(rs.getString("FormalName")); } 
	rs.close(); 
	stmt.close(); 
  } 
  catch (Exception e) { 
	e.printStackTrace(); 
  } 
}

 

 

# input 파라미터만 있는 프로시저 preparedStatement 객체

1. SQL

CREATE PROCEDURE dbo.usp.GetEmployeeManagers
      @EmployeeID INT
AS
BEGIN
:
END

2. JDBC

public static void executeSprocInParams(Connection con) { 
  try { 
	PreparedStatement pstmt = con.prepareStatement("{call 				dbo.usp.GetEmployeeManagers(?)}"); 
	pstmt.setInt(1, 50); 
	ResultSet rs = pstmt.executeQuery(); 
	while (rs.next()) { 
	  System.out.println("EMPLOYEE:"); 
	  System.out.println(rs.getString("LastName") + ", " + 
	  rs.getString("FirstName")); 
	  System.out.println("MANAGER:"); 
	  System.out.println(rs.getString("ManagerLastName") + ",
	  " + rs.getString("ManagerFirstName")); 
	  System.out.println(); 
	} 
	rs.close(); 
	pstmt.close(); 
  } 
  catch (Exception e) { 
	e.printStackTrace(); 
  } 
}

 

 

# input, output 파라미터 둘 다 있는 프로시저 callableStatement 객체

1. SQL

CREATE PROCEDURE GetImmediateManager 
	@employeeID INT, @managerID INT OUTPUT 
AS 
BEGIN 
	SELECT @managerID = ManagerID 
	FROM HumanResources.Employee 
	WHERE EmployeeID = @employeeID 
END

2. JDBC

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(); 
  } 
}
반응형

'전공 공부 > 데이터베이스시스템' 카테고리의 다른 글

함수와 프로시저  (0) 2021.01.03
함수  (0) 2021.01.03
내장 SQL  (0) 2021.01.03
JDBC 사용  (0) 2021.01.03
JDBC 코드 예시  (0) 2021.01.03
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기