안녕하십니까.
가끔 들려서 좋은 Q&A 글들 보고 가는 웹 개발자입니다.
다름이 아니구요.
Spring + 아이바티스 + Oracle을 사용한 기존의 솔루션에서 DB만 PostgreSql 8.3버전으로 포팅하는 중인데요.
SELECT 문은 모두 완료를 하였는데, 나머지 INSERT, DELETE, UPDATE 구문은 전부 오라클 프로시저를 사용했기 때문에 에로 사항이 있습니다.
일단 아이바티스 쪽을 보면..
<parameterMap id="spDeptPrcMap" class="java.util.Map">
<parameter property="r_code" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />
<parameter property="r_msg" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />
<parameter property="flag" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
<parameter property="dept_cd" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
<parameter property="dept_nm" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
<parameter property="s_user_cd" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
<parameter property="s_user_ip" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
</parameterMap>
<procedure id="spDeptPrc" resultClass="java.util.List" parameterMap="spDeptPrcMap">
{ call SP_EZ_DEPT_PRC ( ?, ?, ?, ?, ?, ?, ? ) }
</procedure>
이렇게 호출을 하구요.
실제 오라클 프로시저를 보면..
CREATE OR REPLACE PROCEDURE SP_EZ_DEPT_PRC
(
r_code out varchar2
,r_msg out varchar2
,p_flag varchar2
,p_dept_cd varchar2
,p_dept_nm varchar2
,p_s_user_cd varchar2
,p_s_user_ip varchar2
) is
v_chk_cnt number;
v_max_cnt number;
v_ERROR EXCEPTION;
BEGIN
if p_flag ='ins' then
begin
select nvl(max(dept_cd),0) + 1
into v_max_cnt
from ez_dept;
insert into ez_dept (
dept_cd
,dept_nm
,ins_date
,ins_user_cd
,ins_user_ip )
values (
v_max_cnt
,p_dept_nm
,sysdate
,p_s_user_cd
,p_s_user_ip );
if SQL%ROWCOUNT < 1 then
begin
r_code := '-1';
r_msg := '에러입니다.';
RAISE v_ERROR;
end;
end if;
end;
end if;
r_code := '1';
r_msg := '등록완료입니다.';
return;
EXCEPTION
WHEN v_ERROR THEN
ROLLBACK;
WHEN OTHERS THEN
r_code := '-1';
r_msg := '에러입니다.';
ROLLBACK;
END;
이렇게 되는데요..
자료를 찾아봐도 이런 식의 호출을 PostgreSql로 포팅하는 예제나 샘플이 없더라구요..
혹시 불가능한건지..
가능하면 간단하게 힌트라도 알려주시면 테스트 해보고 적용하도록 하겠습니다.
몇일 하다가 지쳐서 혹시나 하는 마음에 고수분들에게 여쭤봅니다.
그럼 오늘도 즐프 하시구요.
좋은 하루 보내세요. |