- 게시글 번호를 받아 해당 게시글의 파일 삭제(①)후, 게시글 삭제(②)
- 다른 옵션 설정 없이 프로시저를 이용하여 처리
<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"
을 반드시 명시해주어야함