2023-11-22
작성
오라클 DB에서 데이터 insert할 때 시퀀스로 idx를 생성하곤 한다. 만약 insert한 idx값을 바로 가져와야 할 경우 selectKey를 사용하면 된다.
예시를 들어보자. 아래 같이 테이블, 시퀀스가 만들어졌다고 가정한다.
-- 테이블 생성
CREATE TABLE board (
board_id NUMBER NOT NULL,
title VARCHAR2(50),
wirter VARCHAR2(50)
)
-- 시퀀스 생성
CREATE SEQUENCE sq_board_id START WITH 1 INCREMENT BY 1 MANVALUE 1 MAXVALUE 999999999 CYCLE CACHE 50;
xml 쿼리에서 insert 태그 안에 selectKey 옵션을 사용해서 생성한 idx값을 바로 리턴할 수 있다.
<insert id="insertBoard" parameterType="Board">
INSERT INTO BOARD (
board_id,
title,
writer
) VALUES (
sq_board_id.NEXTVAL,
#{title, jdbcType=VARCHAR},
#{writer, jdbcType=VARCHAR}
)
<selectKey keyProperty="boardId" resultType="int" order="AFTER">
SELECT sq_board_id.CURRVAL FROM DUAL
</selectKey>
</insert>
그러면 서비스 단에서 insert 처리한 데이터를 다시 get해보면 생성한 idx를 바로 가져올 수 있다.
boardMapper.insertBoard(board);
int idx = board.getBoardId(); // insert한 idx값을 가져온다
이때 주의할 점이 있다. 아래처럼 insert한 값을 가져오면 결과값이 0 또는 1만 나올 것이다. insert한 리턴 값은 처리 결과 여부이기 때문이다. 이 부분을 주의하자.
int idx = boardMapper.insertBoard(board); // 처리 결과를 가져온다
'Computer Science > DB' 카테고리의 다른 글
H2-console에서 Localhost에서 연결을 거부했습니다. 오류 발생시 해결법 (1) | 2023.11.20 |
---|---|
H2 console 접속 오류 해결법 : Database "C:/Users/사용자명/test" not found, either pre-creat (0) | 2023.10.14 |
한눈에 파악하는 SQL 로드맵 (0) | 2023.09.13 |
Oracle offset (오라클 페이징 처리) (0) | 2022.10.05 |