2014년 10월 30일 목요일

[Spring + iBatis + Oracle] select query with function call

How can I querying select list after Oracle function call

파주에서 개발중에 생전 첨 보는 문데에 맞딱뜨렸다.
오라클 함수를 호출해서 서버와 세션을 맺어야 리스트 조회가 가능한 것이다.
흐흠...

그냥 생각에
function call 먼저 한 번 날리고,
그다음에 list query  날리면 될 거라는 초딩 수준의 생각을 했다면 결과는 뻔하다.
조회 안된다!

오라클 세션도 세션인지라,
하나의 세션 안에서 쿼리를 해야 조회가 되는 것이다.

PL/SQL 클라이언트 프로그램이야 당연히 DB 오픈하면서 세션을 물고 가기 때문에
함수 호출과 쿼리를 두번에 조회해도 조회가 되는 거였다.


그래서 생각해낸 대안은 이랬다.
1. function 와 select query 를 하나로 묶어서 procedure 를 만든다... 이거는 일이 더 커지므로 비추!!
2. select query 바로 앞단에 function call 을 해볼까?

<select id="getList" parameterClass="java.util.Map"  resultClass="map">
                { call my_pkg.my_function(....
<![CDATA[
SELECT ....
해보면 아시겠거니와, 에러난다.

3. 마지막으로 At last!!!
하루동안 고민끝에 트랜잭션에 묶어보면 어떨까?
정말로 될까 긴가민가 했다. 결론은 됐다!!


<select id="getList" parameterClass="java.util.Map"  resultClass="map">
<![CDATA[
SELECT ....


<procedure id="myMkgFuncCall" parameterClass="java.util.Map">
<![CDATA[
call my_pkg.my_function(....


자바에서 호출할 때,

UserDefinedRowHandler rowHandler = new MyRowHandler();
try {
sqlMapClientTemplate.getSqlMapClient().startTransaction();
sqlMapClientTemplate.getSqlMapClient().queryForObject("myMkgFuncCall", map);
sqlMapClientTemplate.getSqlMapClient().queryWithRowHandler("getList", map, rowHandler);
sqlMapClientTemplate.getSqlMapClient().endTransaction();
} catch (SQLException e) {
e.printStackTrace();
}



참고로 MyRowHandler 는 iBatis RowHandler 를 상속받아서 간단히 만들면 된다.
아마도 RowHandler 를 안쓰고 queryForList 로 해도 될 것 같다.


2014년 1월 30일 목요일

해바라기 특송 앱 출시 (sunflower quick service)

https://play.google.com/store/search?q=pname:com.jhil.dalinquick01








스마트폰 사용자를 위한 어플입니다

기존의 퀵서비스의 유통 구조를 개선하여 이용고객님에게 이용금액의 5%를 현금적립시켜드리며 실시간 고객님의 통장으로 이체가 가능한 서비스 입니다

고객님이 접수한 퀵서비스는 GPS시스템을 통해 가장 가까이에 있는 기사에게 배차되어 보다빠르게 배송 하여드립니다

친절 정확 빠른 배송으로 고객님의 만족도를 높이기위해 최선을 다하겠습니다

배차

1.출발지와 도착지를 입력 하시면 자동으로 요금이 생성 됩니다

2.지역특성상 맞지 않는 요금은 고객님께서 조정 하여 보내실 수 있습니다

메뉴

1. "내 주소 등록"을 하시면 더욱더 빠른 배차가 용이합니다

2."내 회원 보기"에서 다른 고객님께 추천 할 수 있으며 추천 하신 회원을 보실 수 있습니다

3."주문내역"에서 그동안 퀵서비스 주문 내역을 보실 수 있습니다

4."주문금액확인"에서 그동안의 총금액을 확인 하실 수 있으며 누적 적립금액을 실시간으로 계좌이체 하실 수 있습니다

전화걸기

1.특이한 물건이나 상담이 필요 하실때

2.불편한 사항이나 건의 사항이 있으시면 언제든지 콜센터에 전화 하시기 바랍니다

1599-7556 또는 1666-4554