본문 바로가기
▶ Back-End/DataBase

Mybatis Oracle BEGIN-END(PL/SQL)

by 오늘도 코딩 2021. 2. 4.
728x90
반응형

 한 번에 쿼리를 2개 이상 실행해야 하는 경우 사용

*PL/SQL에 대한 설명은 간단히 하고, Mybatis에서 어떻게 사용했는지를 다룰 예정

 

 

▷ PL/SQL(Oracle's Procedural Language extension to SQL)이란

오라클에서 제공하는 SQL을 확장한 프로그래밍 언어(절차적 언어, 블록 언어)로 블록 구조를 가지고 있다.

 

 

▷ PL/SQL 블록 구조

 

-- 전체가 하나의 블록이고 구성요소는 아래와 같다.

DECLARE 
 -- 선언부(옵션)
 -- 변수나 상수를 정의
 
BEGIN
 -- 실행부(필수, BEGIN-END)
 -- 로직 수행(일반 SQL문, 조건문, 반복문 등)
 
EXCEPTION
 -- 예외처리부(옵션)
 -- 로직 수행중 에러 발생 시 예외 사항 처리
 
END;

 

 

▷ PL/SQL 블록 종류

① 익명블록(Anonymous PL/SQL) : 일회성으로 사용할 경우

 *여기서 다루는 블록

 

 

② 저장 블록(stored PL/SQL) : DB에 저장해 놓고 주기적으로 반복 사용

 - 프로시저(Procedure)

 - 함수(Function)

 - 패키지(Package)

 - 트리거(Trigger)

 

 

▷ Example

 

<update id="example" parameterType="exampleDto">
	<!-- 선언부는 옵션으로 생략가능 -->
	<!-- 실행부(BEGIN-END) -->
	BEGIN
		<!-- 첫번째 쿼리 -->
		UPDATE 
			EXAMPLE_INFO
		SET 
			NAME = #{name},
			COMMENT = #{comment},
			UPD_ID = #{updId}, 
			UPD_DTM = SYSTIMESTAMP
		WHERE 
			<!-- 쿼리 마지막에 세미콜론(;)을 꼭 사용해야한다. -->
			ID = #{id};


		<!-- 두번째 쿼리 -->
		INSERT INTO EXAMPLE_HIST
			(
				SEQ_NO,
				NAME,
				COMMENT,
				STATUS,
				REGIST_ID,
				REGIST_DTM,
				UPD_ID,
				UPD_DTM
			)    
		VALUES
			(
				<!-- SEQ_NO FORMAT(ex: 2021020400000001) -->
				<!-- || : 앞뒤 문자열을 합한다. -->
				<!-- LAPD : (값, 총 문자길이, 채움문자) -->
				TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(EXAMPLE_HIST_01.NEXTVAL,8,'0'), 
				#{name}, 
				#{comment}, 
				#{status},
				#{id},
				SYSTIMESTAMP,
				#{id},
				SYSTIMESTAMP
			); 
	<!-- 예약처리부는 옵션으로 생략가능 -->             
	<!-- 실행부(BEGIN-END) 마지막에 세미콜론(;)을 꼭 사용해야 한다. -->     
	END; 
</update>

 

 

▷ 관련 글

 

Mybatis Oracle MERGE INTO 구문

Oracle에서 데이터가 없으면 INSERT, 이미 데이터가 있으면 UPDATE *하나의 쿼리로 두 가지 경우를 해결할 수 있다. ▷ 사용법 --쿼리 대상 [TABLE/VIEW] MERGE INTO [TABLE/VIEW] --비교대상 [TABLE/VIEW], DUAL은 위와

coding-today.tistory.com

 

 

728x90
728x90

댓글