2차 프로젝트(9) - 프로시저(Procedure)를 이용한 댓글 기능 구현(테이블과 프로시저 설계)

이애옹·2022년 10월 10일
0

2차 프로젝트

목록 보기
9/12
post-thumbnail

💬 프로시저를 이용한 댓글 기능 구현하기..............ㅎㅎ
2차 프로젝트는 저번주에 끝났는데 바빠서 이제 정리한다😅

프로시저는 좀 길어서 3개로 나눠서 작성해야할것같돠

💡 프로시저란?

데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것으로 영구저장모듈(Persistent Storage Module)이라고도 불린다.
즉, 특정 작업을 위한 커리들의 블록

출처 : Fomagran

📝 테이블 설계하기

일단 댓글 기능 구현을 위한 테이블을 만들어준다!

CREATE TABLE BOOK_BOARD_REPLY3(
    no NUMBER, 
    cno NUMBER,
    type NUMBER,
    id VARCHAR2(20),
    name VARCHAR2(34) CONSTRAINT bb_name_nn NOT NULL,
    msg CLOB CONSTRAINT bb_msg_nn NOT NULL,
    regdate DATE DEFAULT SYSDATE,
    CONSTRAINT bb_no_pk PRIMARY KEY(no),
    CONSTRAINT bb_id_fk FOREIGN KEY(id)
    REFERENCES BOOK_JOIN_3(id)
);

이렇게 만들어줬다 ㅎㅎ.

로그인된 회원만 댓글 작성이 가능하기때문에,
BOOK_JOIN_3 테이블의 ID와 FK 제약조건을 설정해주었다!!

📝 프로시저 생성하기

-- 댓글 작성
create or replace NONEDITIONABLE PROCEDURE replyInsert_3(
    pCno BOOK_BOARD_REPLY_3.cno%TYPE,
    pId BOOK_BOARD_REPLY_3.id%TYPE,
    pName BOOK_BOARD_REPLY_3.name%TYPE,
    pMsg BOOK_BOARD_REPLY_3.msg%TYPE
)
IS
BEGIN
    INSERT INTO BOOK_BOARD_REPLY_3 VALUES(
        (SELECT NVL(MAX(no)+1,1) FROM BOOK_BOARD_REPLY_3),
        pCno,pId,pName,pMsg,SYSDATE
    );
    COMMIT;
END;
/


-- 댓글 읽기
create or replace NONEDITIONABLE PROCEDURE replyListData_3(
    pCno BOOK_BOARD_REPLY_3.cno%TYPE,
    pResult OUT SYS_REFCURSOR
)
IS
BEGIN
    OPEN pResult FOR
     SELECT no,cno,id,name,msg,TO_CHAR(regdate,'YYYY-MM-DD HH24:MI:SS')
     FROM BOOK_BOARD_REPLY_3
     WHERE cno=pCno;
END;
/


-- 댓글 수정
create or replace NONEDITIONABLE PROCEDURE replyUpdate_3(
    pNo BOOK_BOARD_REPLY_3.no%TYPE,
    pMsg BOOK_BOARD_REPLY_3.msg%TYPE
)
IS
BEGIN
        UPDATE BOOK_BOARD_REPLY_3 SET
        msg=pMsg
        WHERE no=pNo;
        commit;
END;
/
-- 댓글 삭제
create or replace NONEDITIONABLE PROCEDURE replyDelete_3(
    pNo BOOK_BOARD_REPLY_3.no%TYPE
)
IS
BEGIN
        DELETE FROM BOOK_BOARD_REPLY_3
        WHERE no=pNo;
        commit;
END;
/

댓글 작성, 읽기, 수정, 삭제 총 4개의 프로시저를 생성해줬다!

참고로 프로시저 문법은

CREATE OR REPLACE PROCEDURE 프로시저 이름
     ( 매개변수명1 [ IN || OUT || INOUT ] 데이터타입,
       매개변수명2 [ IN || OUT || INOUT ] 데이터타입 ... )
IS||AS
       변수, 상수 등 선언 ( 선언부 )
BEGIN
       실행 문장 ( 실행부 )
       [EXCEPTION 문장]
       
END ;

이렇게 쓰면 된다!!!

BEGIN 안에 SQL문을 작성해주면 된다!



이제 Spring 구문을 작성 해 줄건데~~~
원래 다른 파트는 DAO, VO, Mapper, Controller 이렇게 4개를 작성해야 할텐데,
댓글은 3개만 작성해주면 된다!!!

왤까요???

ㅎㅎ..

원래였다면 Mapper에 SQL문을 작성해야 했는데,
프로시저를 선언할때 이미 SQL 구문을 작성했기때문에!! Mapper 없이 호출만 하면된다!

여튼 다시 시작해보ㅈ ㅏ

profile
안녕하세요

0개의 댓글