■예 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;