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
'▶ Back-End > DataBase' 카테고리의 다른 글
Cassandra Snapshot Backup And Restore 방법 (2) | 2023.10.04 |
---|---|
MySql ON DUPLICATE KEY UPDATE 구문 (0) | 2023.08.02 |
Mybatis foreach문(반복문/동적 SQL) (0) | 2021.02.04 |
Mybatis Oracle Paging Query(더보기 기능) (0) | 2021.02.03 |
Mybatis Oracle MERGE INTO 구문 (0) | 2021.01.29 |
댓글