동적 SQL FOR PACKAGE OR PROCEDURE

아래 샘플은 어떤 PACKAGE내의 BODY 일 부분만을 표시하였다.
PACKAGE SPAC 부분은 아래 부분을 보면서 유추하길 바란다.

동적 QUERY로 데이터를 SELECT 할때 부분인데
동적 QUERY 자체를 사용하는 것 보다 어떤 때에 동적쿼리를 사용해야 하는지
본인이 정확히 파악하고 있어야 한다.

expert one on one 참조

    PROCEDURE GET_DATA_LIST(
     V_BOARDCD IN BBS_DATA_INFO.BOARDCD%TYPE
    ,   V_DATACD IN BBS_DATA_INFO.DATACD%TYPE
    ,   V_PAGE_NO IN NUMBER := 1
    ,   V_PAGE_SIZE IN NUMBER := 10
    , V_ISACTIVE IN CHAR := 'Y'
    ,   V_SEARCHTYPE IN VARCHAR2 := ''
    ,   V_SEARCHTEXT IN VARCHAR2 := ''
    , V_RS OUT RS)
    IS
     V_SQL VARCHAR2(2000);
        V_QUERY VARCHAR2(2000);
    BEGIN


        V_SQL:='SELECT DATACD, BOARDCD, CATETYPECD, CPCD, CATETYPENAME, PARENTCD,
                       BRENCH, NOTETYPE, SUBJECT, NID, USERID, NICKNAME,
                       POINTTOTAL, READNUM, MEMOCNT, REPCNT, REGDATE,
                       NUM, ROWNUM RNUM
                FROM (
                    SELECT DATACD, BOARDCD, CATETYPECD, CPCD, CATETYPENAME, PARENTCD,
                           BRENCH, NOTETYPE, SUBJECT, NID, USERID, NICKNAME,
                           POINTTOTAL, READNUM, MEMOCNT, REPCNT, REGDATE,
                           ROW_NUMBER() OVER ( ORDER BY NOTICESORT DESC, SORTCODE DESC) AS NUM
                    FROM JAPANDEV.VI_BBS_LIST
                    WHERE DATACD = '||V_DATACD||' AND BOARDCD = '||V_BOARDCD||' AND ISACTIVE = '''||V_ISACTIVE||'''';


        IF LENGTH(V_SEARCHTYPE) > 0 THEN
            V_SQL := V_SQL || ' AND '|| V_SEARCHTYPE ||' LIKE '''||V_SEARCHTEXT||'%''';
        END IF;


        V_SQL := V_SQL ||  ' ) ORDER BY RNUM DESC ';


        V_QUERY := 'SELECT * FROM (
                        SELECT ROWNUM AS RN, A.*, COUNT(*) OVER() AS TOTAL_RECORD FROM
                        ( ' || V_SQL || ') A
                    ) WHERE RN BETWEEN (('||V_PAGE_NO||' - 1) * '||V_PAGE_SIZE||') + 1 AND ('||V_PAGE_NO * V_PAGE_SIZE||')';
      
       
        OPEN V_RS FOR V_QUERY;
           
    END GET_DATA_LIST;