db를 postgresql 12 버전의 프로시저를 사용하고
어플리케이션은 java + spring + mybatis 를 사용합니다.
문제되는 부분이 프로시저에서 자바 쪽으로 넘겨야 될 데이터가
cursor 형태로 되어있는 경우에 자바 쪽으로 받아지지 안고 에러가 나옵니다.
기존에 oracle에서는 되었는데요. 오라클에서 했던 방식으로 기술하면 에러가 납니다.
현재 function에서 cursor를 넘길수가 있는데요 그렇게 되면
기존 어플리케이션의 자바쪽의 수정이 너무 많아
고려하지 않고 있습니다.
아래와 같이 프로시저와 mybatis에서 부분을 써 놓았는데요..
out변수는 총 3개이고 빨간색 변수가 커서가 됩니다.
프로시저의 cursor에서 받을 수 있는 방법이 있을까요?
mybatis쪽에서 기술한 호출 방법이 잘못되었나요?
다르게 기술하는 방식이 있을까요?
<mapper namespace="Login">
<resultMap id="session" type="egovframework.rte.cmmn.ria.SessionVO" />
< select id="select" statementType="CALLABLE">
{
CALL TEST_GET_DATA_SINGLE(
1
, #{_message , mode=OUT, jdbcType=VARCHAR, javaType=String}
, #{_result_one , mode=OUT, jdbcType=CURSOR , resultMap=session}
, #{_returncode , mode=OUT, jdbcType=VARCHAR, javaType=String}
)
}
< /select>
< /mapper>
<프로시저 부분 시작>
CREATE OR REPLACE PROCEDURE public.test_get_data_single(
_itemid integer,
INOUT _message character varying DEFAULT ''::character varying,
INOUT _result_one refcursor DEFAULT 'rs_resultone'::refcursor,
INOUT _returncode character varying DEFAULT ''::character varying)
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
_message := 'Test message for item ' || COALESCE(_itemID, 0);
_returnCode := '';
open _result_one for
SELECT *
FROM (values (1,2,3, 'fruit', current_timestamp - INTERVAL '5 seconds'),
(4,5,6, 'veggie', current_timestamp)) as t(a,b,c,d,e);
END;
$BODY$; |