Spring 의 SimpleJdbcCall 이용시 에러.
spring 을 이용하여 Oracle 의 Stored procedure 를 호출하는데,
계속 인수가 맞지 않다고 에러를 뱉어낸다.
Junit test 돌려보면 지극히 정상인데.. 시스템에서는 에러를 내고 있으니. 당췌 원인을 알 수가 없다는.
jdbc driver 문제인가, 아니면 사용중인 library 가 문제인가.
여기 저기 뒤져보고.. 별 짓을 다 해봐도 안됐다는...
시스템 담당자에게 procedure 생성 script 달라고 해서 원인 분석
o. junit test 환경
- local db 에 abc user 로 접속
- abc user 가 procedure 생성
- test 수행 시 abc user 로 수행
- procedure 정상 호출됨
o. system 환경
- remote db 에 def user 로 접속
- dba user 가 procedure 생성
- dba user 가 생성한 procedure 에 대해 def user 에 synonym 생성
- 생성된 procedure 에 대해서 def user 에 실행권한 부여
- def user 로 procedure 호출
- 인수가 맞지 않다고 오류 발생
마지막이란 심정으로다가, system 환경을 local 에서 재현해봄.
1. local db 에 def user 생성
2. abc user 가 생성한 procedure 에 대해 def user 에 synonym 생성
3. abc user 가 생성한 procedure 에 대해 def user 에게 실행권한 부여
4. def user 로 procedure 호출
=> 인수가 맞지 않다고 오류 발생
드디어 원인 발견!
실제 procedure 를 실행하는 db user 는 synonym 을 보고 있기 때문에,
다른 db user 가 생성한 procedure에 대한 meta 정보를 못가져오는듯 하다.
(짐작임)
그래서, SimpleJdbcCall 사용할 때 withSchemaName("abc") 을 하니 잘 되더란!
끝.