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 |