We have created a awesome theme
Far far away,behind the word mountains, far from the countries

INFO 실전 DB모델링과 SQL과정

INFO

실전 DB모델링과 SQL과정
조회수 3869
제목 Chapter8_공통코드의 설계 : 예제모음
작성자 관리자
작성일자 2021-12-03

■예 8_3_1  ||  리쿼시브 - 하위 메뉴 검색
SELECT  LEVEL, LPAD(' ',4*LEVEL)|| MENU_ID, MENU_NAME
FROM     A_MENU_LIST
CONNECT BY PRIOR  MENU_ID = UPPER_MENU_ID
START WITH       MENU_ID = 'toc40000';



■예 8_3_2  ||  리쿼시브 - 메뉴를 level별로 정렬
SELECT  LEVEL, LPAD(' ',4*LEVEL)||MENU_ID, MENU_NAME
FROM A_MENU_LIST
 CONNECT BY PRIOR MENU_ID = UPPER_MENU_ID
 START WITH MENU_ID IN (   -- 최상위 메뉴를 추출한다.
                              SELECT  MENU_ID
                                     FROM  A_MENU_LIST
                                     WHERE   UPPER_MENU_ID IS NULL);



■예 8_3_3  ||  리쿼시브 - 상위 메뉴 검색
SELECT  LEVEL, LPAD(' ',4*LEVEL)|| MENU_ID, MENU_NAME
FROM   A_MENU_LIST
CONNECT BY PRIOR UPPER_MENU_ID = MENU_ID  
START WITH       MENU_ID = 'toc55556';



■[SQL 8_3_3]
____SELECT LPAD(' ', 2*LEVEL)||COL1, COL2 .
FROM TABLE_1
CONNECT BY PRIOR ID1 = UPPER_ID1
         AND PRIOR ID2 = UPPER_ID2
START WITH UPPER _ID1 = 'AAA'
         AND UPPER _ID2 = '100000';



■예 8_3_4  ||  리쿼시브 - 특정 경우 제외
SELECT  LEVEL, LPAD(' ',4*LEVEL)|| MENU_ID, MENU_NAME
FROM     A_MENU_LIST
WHERE    MENU_ID <> 'toc40110' --이 코드만 제외하고
CONNECT BY PRIOR  MENU_ID = UPPER_MENU_ID
START WITH       MENU_ID = 'toc40000';



■예 8_4_1  ||  조인으로 조회
SELECT T1.SABUN, T1.NAME,
  --T1.POS_GBN_CODE, --'C03'
 T2.CODE_NAME, --직위
        --T1.CLASS_GBN_CODE, --'B01'
        T3.CODE_NAME, --등급
        T1.PHONE,
        T1.HP,
        T1.ADDR1,
        T1.JOIN_DAY
FROM INSA T1,
       CMM_CODE_DETAIL T2,
       CMM_CODE_DETAIL T3
WHERE T1.POS_GBN_CODE  = T2.CODE_NO(+)
AND   T2.CLASS_CODE(+)     = 'C03' --직위구분코드
AND   T1.CLASS_GBN_CODE = T3.CODE_NO(+)
AND   T3.CLASS_CODE(+)     = 'B01' --등급구분코드;



■예 8_4_2  ||  서브쿼리 조회
SELECT T1.SABUN, T1.NAME,
         --T1.POS_GBN_CODE, --'C03'
        ( SELECT CODE_NAME
          FROM CMM_CODE_DETAIL T2
          WHERE T1.POS_GBN_CODE = T2.CODE_NO
          AND T2.CLASS_CODE = 'C03' --직위구문코드) AS POS_GBN_NAME, --직위명
        --T1.CLASS_GBN_CODE, --'B01'
        ( SELECT CODE_NAME
          FROM CMM_CODE_DETAIL T3
          WHERE T1.CLASS_GBN_CODE = T3.CODE_NO
          AND T3.CLASS_CODE = 'B01' --등급구분코드) AS CLASS_GBN_NAME, --등급명
        T1.PHONE,
        T1.HP,
        T1.ADDR1,
        T1.JOIN_DAY
FROM INSA T1;



■예 8_4_3  || 공통코드조회 FUNCTION 작성
CREATE OR REPLACE FUNCTION GET_CMM_CODE_NAME
(V_CLASS_CODE IN CMM_CODE_DETAIL.CLASS_CODE%TYPE,
 V_CODE_NO IN CMM_CODE_DETAIL.CODE_NO%TYPE)
RETURN VARCHAR2
IS
V_CMM_CODE_NAME CMM_CODE_DETAIL.CODE_NAME%TYPE;

BEGIN

SELECT CODE_NAME
         INTO  V_CMM_CODE_NAME
         FROM____ CMM_CODE_DETAIL
         WHERE CODE_NO = V_CODE_NO
         AND CLASS_CODE = V_CLASS_CODE;
             
RETURN  V_CMM_CODE_NAME;
EXCEPTION
        WHEN NO_DATA_FOUND THEN
               RETURN  V_CMM_CODE_NAME;
               --DBMS_OUTPUT.PUT_LINE('입력한 코드는 없습니다.');
        WHEN TOO_MANY_ROWS THEN
               DBMS_OUTPUT.PUT_LINE('자료가 2건 이상입니다.');
        WHEN OTHERS THEN
               DBMS_OUTPUT.PUT_LINE('기타 에러입니다.');
END;
/



■예 8_4_4  ||  FUNCTION 이용한 공통코드 조회
SELECT T1.SABUN, T1.NAME,
       --T1.POS_GBN_CODE, --'C03'
       GET_CMM_CODE_NAME('C03', T1.POS_GBN_CODE) AS  POS_GBN_NAME, --직위명
       GET_CMM_CODE_NAME('B01', T1.CLASS_GBN_CODE) AS  CLASS_GBN_NAME, --등급명
       T1.PHONE,
       T1.HP,
       T1.ADDR1,
       T1.JOIN_DAY
FROM INSA T1;

첨부파일