개발서버 테스트 중 프로시저 에러가 나서 뜯어봤다
기존엔 이벤트스케줄러에서 바로 프로시저를 호출하는 방법으로밖에 써보지 않아서
자바단에서 sp를 사용하는 코드를 처음 봄 기념으로 정리해본다
CallableStatement란?
SQL의 스토어드 프로시저(Stored Procedure)를 실행시키기 위해 사용되는 인터페이스.
스토어도 프로시저란, query문을 하나의 파일 형태로 만들거나 데이터베이스에 저장해놓고 함수처럼 호출해서 사용하는 것이다. 이를 자바에서 사용하면 자바코드에 query문이 들어가지 않으므로 자바 코드가 간결해지고 sql에 독립적이 된다.
스토어드 프로시저를 자바에서 사용하려면, execute를 호출하기에 앞서 registerOutParameter()를 호출해야 한다
sp의 특이한 점은 파라미터로 return값을 할당할 변수도 넣어줘야한다는 점인듯
registerOutParameter(int parameterIndex, int sqlType) throws SQLException
위 메소드는 프로시저로 받아온 값을 JDBC타입으로 등록하는 메소드로, 모든 리턴값은 이 과정을 거쳐야 한다.
예제코드
ProcedureDAO.java
CallableStatement Cs = null;
TestVO vo = service.getTestVo();
Try{
Cs = con.callStatement(“{call PR_TEST(?,?,?,?,?,?,?)}”);
Int i = 1;
Cs.setString(i++, vo.getDocId());
Cs.setString(i++, vo.getRegUserNm());
Cs.registerOutParameter(i++, java.sql.Types.VARCHAR);
Cs.registerOutParameter(i++, java.sql.Types.VARCHAR);
Cs.registerOutParameter(i++, java.sql.Types.INTEGER);
Cs.registerOutPutParameter(i++, java.sql.Types.INTEGER);
Cs.registerOutParameter(i++, java.sql.Types.VARCHAR);
Cs.execute();
} catch(Exception e){
//TODO
}
폰으로 썼더니 대문자가 된 변수
암튼
Cs.execute()를 실행하기 전에 파라미터를 셋팅해주는 과정을 보면
두번째줄까지는 input 파라미터이고,
그 아래 다섯개는 프로시저에서 리턴되는 결과를 담기 위한 변수의 타입을 지정해주는 느낌인듯하다
DECLARE
A VARCHAR2(12);
B VARCHAR2(12);
C NUMBER(4);
D NUMBER(4);
E VARCHAR2(12);
BEGIN
PR_TEST('202309190931', 'TESTER');
END;
sql로 스토어드프로시저를 실행하는 쿼리
'개발' 카테고리의 다른 글
Spring 설정 중 properties파일 xml에서 이용하기 (0) | 2023.09.24 |
---|---|
[에러일기] Path contains invalid character: (0) | 2023.09.19 |
POST방식으로 AJAX를 보낼 때, JSON parse error: Unrecognized token 'postidx' (0) | 2023.02.13 |
Mysql : INSERT 후 다른 테이블 UPDATE하는 트리거 (0) | 2023.02.06 |
포스트맨으로 스프링 시큐리티가 적용된 프로젝트 테스트하기 (0) | 2023.02.03 |