Backend/Spring
[Spring Boot] myBatis Procedure / function 호출
romeoh
2019. 12. 4. 15:20
반응형
Spring Boot / Oracle / Mybatis 차례
<mapper namespace="com.gaeyou.project.store.mapper.ProjectMapper">
<!-- 프로시저 호출하기 -->
<insert id="saveData" parameterType="com.gaeyou.project.entity.ProjectDTO" statementType="CALLABLE">
{ CALL /* saveData */
SP_SAVE_DATA (
IN_OPERATION => #{operation , mode=IN , jdbcType=VARCHAR}
,IN_DATA => #{data , mode=IN , jdbcType=VARCHAR}
,RETURN_CODE => #{returnCode , mode=OUT , jdbcType=VARCHAR}
,ERROR_MSG => #{errorMsg , mode=OUT , jdbcType=VARCHAR}
)
}
</insert>
<!-- 함수 호출하기 -->
<select id="retrieveData" parameterType="com.gaeyou.project.entity.ProjectDTO" resultType="com.gaeyou.project.entity.ProjectDTO">
<![CDATA[
SELECT /* retrieveData */
FN_RETRIEVE_DATA(
#{data, jdbcType="VARCHAR"}
,#{name, jdbcType="VARCHAR"}
,#{age, jdbcType="NUMERIC"}
) AS RESULT_VALUE
FROM DUAL
]]>
</select>
</mapper>
CREATE OR REPLACE PROCEDURE SP_SAVE_DATA (
IN_OPERATION IN VARCHAR2 --
, IN_DATA IN VARCHAR2 --
, RETURN_CODE IN OUT VARCHAR2 --
, ERROR_MSG IN OUT VARCHAR2 --
) IS
BEGIN
RETURN_CODE := 0
ERROR_MSG := '';
IF TRIM(IN_OPERATION) IS NULL THEN
RETURN_CODE := -1;
ERROR_MSG := 'NO SELECTED INFO';
RETURN
END IF;
IF IN_OPERATION = 'C' THEN
INSERT INTO TABLE(
DATA
)
SELECT
IN_DATA
FROM DUAL;
ELSEIF IN_OPERATION = 'U' THEN
UPDATE TABLE SET
DATA = IN_DATA;
ELSEIF IN_OPERATION = 'D' THEN
DELETE FROM TABLE;
END IF;
EXCEPTION WHEN OTHER THEN
RETURN_CODE := -1;
ERROR_MSG := 'EXCEPTION ERROR'
END;
CREATE OR REPLACE FUNCTION FN_RETRIEVE_DATA (
IN_DATA IN VARCHAR2
,IN_NAME IN VARCHAR2
,IN_AGE IN NUMBER
) RETURN NUMBER
PRAGMA AUTONOMOUS_TRANSACTION;
RETURN_VAL NUMBER;
BEGIN
IF IN_DATA IS NULL OR IN_NAME IS NULL THEN
RETURN -1;
END IF;
BEGIN
SELECT
1 AS RETURN_VAL
FROM DUAL
END
COMMIT
RETURN RETURN_VAL
EXEPTION WHEN OTHERS THEN
RETURN -1;
END;
반응형