DataBase/RDBMS

Oracle Procedure

개요

Oracle 프로시저는 데이터베이스 내에서 실행 가능한 저장 프로그램(unit of executable code)입니다.
 프로시저는 일련의 SQL 문과 제어 구문들을 포함하며, 데이터베이스에서 특정 작업을 수행하는 데 사용됩니다.

프로시저는 데이터베이스 내에서 로직을 구현하고, 일련의 작업을 수행하며, 재사용 가능한 코드 단위로 사용됩니다.
 주로 복잡한 비즈니스 로직이나 데이터 조작 작업을 수행하기 위해 사용됩니다.

프로시저는 특정한 이름으로 데이터베이스에 저장되며, 필요할 때마다 호출되어 실행됩니다.

 프로시저는 매개 변수를 받아들일 수 있고, 데이터베이스 내의 테이블에 접근하고 수정할 수 있습니다.

 프로시저는 조건문, 반복문, 예외 처리 등과 같은 제어 구문을 사용하여 로직을 제어할 수 있습니다.
프로시저는 데이터베이스에서 트랜잭션의 일부로 실행될 수 있으며,

 커밋 및 롤백과 같은 트랜잭션 제어 기능을 사용할 수 있습니다.

 또한, 프로시저는 데이터베이스 내에서 예약된 작업(job)으로 스케줄링되어 정기적으로 실행될 수도 있습니다.
프로시저는 데이터베이스의 성능을 향상시키고,
코드 재사용성을 높이며, 보안 및 데이터 무결성을 유지하는 데 도움을 줍니다.

 또한, 복잡한 작업을 단일 단위로 캡슐화하여 유지 관리 및 디버깅을 용이하게 합니다.

 

프로시저 예제 쿼리

// 입력 프로시저 예제
CREATE OR REPLACE PROCEDURE EXAMPLE_PROCEDURE(
	IN_DATA IN VARCHAR2,
	OUT_ERROR_CODE OUT NUMBER,
	OUT_ERROR_MESSAGE OUT VARCHAR2
)
IS
BEGIN
	INSERT INTO EXAMPLE_TABLE(COLUMN) VALUES(IN_DATA);
	
	OUT_ERROR_CODE := 0;
	OUT_ERROR_MESSAGE := '성공';
    
	EXCEPTION
	WHEN NO_DATA_FOUND THEN
    	NULL;
	WHEN OTHERS THEN
    	ROLLBACK;
		OUT_ERROR_CODE := -1;
		OUT_ERROR_MESSAGE := '실패';

END EXAMPLE_PROCEDURE;

호출 방법

Mapper XML

<select id="example_call_procedure" statementType="CALLABLE" parameterType="hashMap">
    {
    	call EXAMPLE_PROCEDURE
        (
            #{INPUT_DATA, mode=IN, jdbcType=VARCHAR},
            #{OUTPUT_ERROR_CODE, mode=OUT, jdbcType=DECIMAL, javaType=long},
            #{OUTPUT_ERROR_MESSAGE, mode=OUT, jdbcType=VARCHAR, javaType=java.lang.String}
        )
    }
</select>

Mapper 호출

Map param = new HashMap<>();
param.put("INPUT_DATA", "값"); // 입력
param.put("OUTPUT_ERROR_NUMBER", -1); // 출력
param.put("OUTPUT_ERROR_MESSAGE", "오류"); // 출력

sqlSession.selectOne("example_call_procedure", param); // 프로시저 호출

참고자료

https://engineeringcode.tistory.com/408