CallableStatement 계열의 객체

저건 또 뭐냐 하면 오라클에 정의된 함수나 프로시저를 자바에서 사용 할 때 이용하는 객체라네!!!
 자바에서 함수나 프로시저를 실행시에는  무조건 execute()메소드로 실행한다

 

우선 큰 흐름을 먼저 보자


1.Connection객체의 prepareCall()메소드로  생성
   형식
   prepareCall("{ ? = call 함수명(?,?...)}");
     첫번째 물음표는 반환값을 의미 
         반환값은 파라미터 설정시 java.sql.Types클래스의 int형 상수로 설정한다.
         설정 시 registerOutParameter()메소드 사용      
         매개변수 설정시는 기존 PreparedStatement객체와 동일

 

2. 인파라미터 설정
  매개변수는 즉 인파라미터는 setXXX()계열 메소드로 설정

 

3.반환값에 해당하는 파라미터는 아웃 파라미터 방식으로 설정(registerOutParameter(인덱스번호,types.어떤타입인지))

 

4.함수 실행

    무조건 execute()메소드로 실행

 

5. 반환값은 getXXX()계열로 얻어온다. 단 ,인덱스는 무조건 1이다.

 

6.자원반납 꼭 끝내기 !!!

 

//우선 먼저 오라클에 함수는 정의 되어 있어야 함!
//[오라클 함수]
/*
create or replace FUNCTION TO_ASTERISK(val VARCHAR2)
	RETURN VARCHAR2
IS
BEGIN
	RETURN RPAD(SUBSTR(val,1,1),LENGTH(val),'*');
END; 
*/



public class FunctionCall extends IConnectImpl {
	public FunctionCall(){
    	connect(ORACLE_URL,"scott","scott");
     }
	 @Override
	 public void execute() throws Exception {
    		//1. 객체생성 : prepareCall()메소드
          	csmt = conn.prepareCall("{? = call TO_ASTERISK(?)}");  
            //2.인파라미터 설정 : 매개변수는 즉 인파라미터는 setXXX()계열 메소드
            csmt.setString(2,getValue("문자열"));
            //3.반환값에 해당하는 파라미터는 아웃 파라미터 방식으로! 무조건 인덱스 1! registerOutParameter()메소드
  			csmt.registerOutParameter(1,Types.VARCHAR); 
            //4.함수 실행 : execute()메소드로 실행 , 무조건 false 반환 됨
             System.out.println(csmt.execute());  
            //5.반환 : 반환값은 getXXX()계열로 얻어온다. 인덱스는 1
     		System.out.println("함수의 반환값:"+csmt.getString(1));
		    //6.닫기
            close();		 		 
      }    

	public static void main(String[] args) throws Exception {
		new FunctionCall().execute();
	

	}///main
}////////////class

 

'학원 > JDBC' 카테고리의 다른 글

10/24 27-12 (UpdateProc.CallableStatement)  (0) 2022.10.24
10/24 27-11 (InsertProc.CallableStatement)  (0) 2022.10.24
10/24 27-9 (SelectSQL.prepared)  (0) 2022.10.24
10/24 27-8 (UpdateSQL.prepared)  (0) 2022.10.24
10/24 27-7(DeleteSQL.prepared)  (0) 2022.10.24

+ Recent posts