[마이바티스]프로시저로 다중쿼리 처리하기

Nux·2022년 7월 4일
0
  • 게시글 번호를 받아 해당 게시글의 파일 삭제(①)후, 게시글 삭제(②)
  • 다른 옵션 설정 없이 프로시저를 이용하여 처리
<delete id="deleteBoard" parameterType="int">
begin
	delete from board_files where board_no = #{boardNo}; -- 파일 삭제
	delete from board where board_no = #{boardNo}; -- 게시글 삭제
end;
</delete>

프로시저

-- ★ 프로시저의 선언
CREATE [OR REPLACE] PROCEDURE 프로시저명
	(패러미터1 in 패러미터타입,
     패러미터2 in 패러미터타입, 
     ...)
AS 혹은 IS
	변수명 변수타입
-- 이 위로 생략 가능
BEGIN
	명령어1;
    명령어2;
    [EXCEPTION 예외처리 구문]
END [이름];

-- ★ 프로시저의 실행
EXEC 혹은 EXECUTE 프로시저명(값1, 값2, ...);
  • 여러 동작을 일괄적으로 처리하는 기능. 한번에 2개 이상의 쿼리를 처리 할 수 있음
  • 결과값을 반환하지 않음. 즉, select 사용 불가
  • 프로시저 내 변수는 임시 데이터 1개만 저장 가능
  • 세미콜론 사용에 주의

예제

  • board와 board_files이라는 테이블에 게시글, 파일을 등록 할 때
    • 두 게시판은 no(게시글번호)로 이어진 PK-FK관계

프로시저를 쓰지 않았을 때

insert into board(no, title, content, writer)
values(100, "테스트", "첫번째 글", "홍길동");

insert into board_file(no, fileName, fileNo)
values(100, "공지사항.hwp", 3);
  • 두 구문을 각각 실행시켜야 함

프로시저를 썼을 때

-- 선언
create or replace procedure prc_board_insert
(
	v_no in number,
	v_title in varchar2,
	v_content in varchar2,
	v_writer in varchar2,
	v_fileName in varchar2,
	v_fileNo in number
)
begin
	insert into board(no, title, content, writer)
	values(v_no, v_title, v_content, v_writer);

	insert into board_file(no, fileName, fileNo)
	values(v_no, v_fileName, v_fileNo);
end;

-- 실행
EXEC prc_board_insert(100, "테스트", "첫번째 글", "홍길동", "공지사항.hwp", 3);

마이바티스에서 프로시저 사용하기(insert)

<insert id="insertBoard" statementType="CALLABLE" parameterType="map">
{call prc_board_insert
    (
        #{no}, #{title}, #{content}, 
        #{writer}, #{fileName}, #{fileNo}
    )
}
</insert>
  • statementType="CALLABLE"을 반드시 명시해주어야함

0개의 댓글