근데.. 정말 들을꺼도 없고..
잠만 오고..
회사에 세미나비는 청구도 못하고.. ;;
아놔... ;;
2번은 듣기 싫은 세미나.. 사기야 사기.. ㅠㅠ
'Story > Diary' 카테고리의 다른 글
생일 파뤼? (0) | 2010.08.25 |
---|---|
생일 선물.. (0) | 2010.08.24 |
[Movie] 아저씨 (0) | 2010.08.17 |
청첩장 접기 (0) | 2010.08.12 |
[Movie] 인셉션 (0) | 2010.07.30 |
생일 파뤼? (0) | 2010.08.25 |
---|---|
생일 선물.. (0) | 2010.08.24 |
[Movie] 아저씨 (0) | 2010.08.17 |
청첩장 접기 (0) | 2010.08.12 |
[Movie] 인셉션 (0) | 2010.07.30 |
===================================================================
[예]
SELECT
LEVEL AS LEV
, MENU.*
FROM
TBL_MENU MENU
WHERE MENU_TYPE_CD = '1'
START WITH MENU.MENU_ID = 'TOP'
CONNECT BY PRIOR MENU.MENU_ID = MENU.UP_MENU_ID
ORDER SIBLINGS BY MENU_SEQ
===================================================================
[풀이]
UP_MENU_ID 가 'TOP'인 것부터 순환고리를 시작하며
동일 레벨일경우(즉, UP_MENU_ID 가 'TOP'으로 하는 여러 ROW)는 MENU_SEQ가 먼저인것 부터 계층구조
그리고 마지막으로 MENU_TYPE_CD가 '1'인것만 최종 추출
===================================================================
◈ LEVEL 예약어 : depth
◈ CONNECT BY의 실행순서
(1) START WITH 절
(2) CONNECT BY 절
(3) WHERE 절
◈
START WITH : 시작위치 설정 (서브쿼리를 사용가능)
CONNECT BY : 순환고리의 조건 (서브쿼리를 사용불가)
ORDER SIBLINGS BY : 같은 레벨중 순환고리 순서를 정할때 사용
◈ PRIOR 의 위치
(1) CONNECT BY PRIOR 자식컬럼 = 부모컬럼 ==> 부모에서 자식으로 트리 구성
(2) CONNECT BY 자식컬럼 = PRIOR 부모컬럼 ==> 자식에서 부모으로 트리 구성
◈ 데이터가 많아질 경우....
- START WITH MENU_ID = 'TOP'
MENU_ID 컬럼에 index가 생성되어 있지 않는다면 속도를 보장할 수 없습니다.
- CONNECT BY PRIOR MENU_ID = UP_MENU_ID
역시 PRIOR 쪽의 컬럼값이 상수가 되기 때문에 UP_MENU_ID컬럼에 index를 생성하여야 CONNECT BY의 속도를 보장할 수 있습니다.
- 계층구조를 CONNECT BY, START WITH로 풀면 부분범위 처리가 불가능하고 Desc으로 표현하기가 어렵 습니다.
◈
(1) '상품' 메뉴는 모두 출력 안함.
SELECT
LEVEL AS LEV
, MENU.*
FROM
TBL_MENU MENU
WHERE MENU.MENU_NAME <> '상품'
START WITH MENU.MENU_ID = 'TOP'
CONNECT BY PRIOR MENU.MENU_ID = MENU.UP_MENU_ID
ORDER SIBLINGS BY MENU_SEQ
(2) '상품'메뉴 밑으로 모든 메뉴는 출력안함.
SELECT
LEVEL AS LEV
, MENU.*
FROM
TBL_MENU MENU
START WITH MENU.MENU_ID = 'TOP'
CONNECT BY PRIOR MENU.MENU_ID = MENU.UP_MENU_ID
AND MENU.MENU_NAME <> '상품'
ORDER SIBLINGS BY MENU_SEQ
** 참고) 메뉴중 2LEVEL까지만 결과 출력
(WHERE조건으로도 LEVEL <= 2가능함. 그러나 권하지는 않는다.
왜? WHERE 조건은 모든 나온결과에 대해서 FILTER하지만 CONNECT BY절의 조건으로 넣으면 순환자체를 안한다. 즉 성능에 좋다)
SELECT
LEVEL AS LEV
, MENU.*
FROM
TBL_MENU MENU
START WITH MENU.MENU_ID = 'TOP'
CONNECT BY PRIOR MENU.MENU_ID = MENU.UP_MENU_ID
AND LEVEL <= 2
ORDER SIBLINGS BY MENU_SEQ
◈
(1) 들여쓰기로 결과출력
SELECT
LPAD(’ ’, 4*(LEVEL-1)) || MENU.MENU_NAME
, MENU.*
FROM
TBL_MENU MENU
WHERE MENU_TYPE_CD = '1'
START WITH MENU.MENU_ID = 'TOP'
CONNECT BY PRIOR MENU.MENU_ID = MENU.UP_MENU_ID
ORDER SIBLINGS BY MENU_SEQ
(2) 엑셀과 같이 셀 단위로 들여쓰기
SELECT
DECODE(LEV, '1', MENU_NAME, '') AS LEV1
, DECODE(LEV, '2', MENU_NAME, '') AS LEV2
, DECODE(LEV, '3', MENU_NAME, '') AS LEV3
, DECODE(LEV, '4', MENU_NAME, '') AS LEV4
, DECODE(LEV, '5', MENU_NAME, '') AS LEV5
FROM
(
SELECT
LEVEL AS LEV
, MENU.*
FROM TBL_MENU MENU
WHERE MENU_TYPE_CD = '1'
START WITH MENU.MENU_ID = 'TOP'
CONNECT BY PRIOR MENU.MENU_ID = MENU.UP_MENU_ID
ORDER SIBLINGS BY MENU_SEQ
)
오라클 백그라운드 프로세서 (0) | 2010.09.28 |
---|---|
oracle 에서 파티션(partition) 사용하기 (0) | 2010.08.28 |
오라클 클라이언트 가 토드에서 안될때. ㅋ (0) | 2010.06.29 |
update 방법들 (0) | 2010.06.16 |
Oracle optimizer goal, FIRST_ROWS 그리고 ALL_ROWS (0) | 2010.05.14 |
oracle 에서 파티션(partition) 사용하기 (0) | 2010.08.28 |
---|---|
계층형 쿼리 (CONNECT BY) (0) | 2010.07.14 |
update 방법들 (0) | 2010.06.16 |
Oracle optimizer goal, FIRST_ROWS 그리고 ALL_ROWS (0) | 2010.05.14 |
◈ DB Link (오라클 원격DB 연결) (0) | 2010.05.13 |
■ ALL_ROWS - throughput 최대화를 위한 optimizing을 한다.
- full table scan을 선호하는 경향이 있다.
- batch 프로그램 또는 report 출력 프로그램에 사용되는게 좋다.
■ FIRST_ROWS
- response time 최소화를 위한 optimizing을 한다.
- index scan을 선호하는 경향이 있다.
- index scan을 선호하는 경향이 있기에 작은 테이블로부터 데이터를 찾을 때도 index scan을 해서
full table scan을 하는 것보다 cost가 더 걸리는 단점이 있다.
- user interaction 즉, 화면계에 사용하면 좋다.
■ FIRST_ROWS_N
- Oracle 9i부터 도입된 파라미터.
- FIRST_ROWS의 단점을 보안했다.
단점이란, FIRST_ROWS_1, FIRST_ROWS_10, FIRST_ROWS_100, FIRST_ROWS_1000 처럼
FIRST ROWS의 범위를 지정하도록 함으로써 index scan를 해야하는 지, full table scan을 해야하는 지에
대한 선택을 더 현명하게 하도록 했다는 것이다.
오라클 클라이언트 가 토드에서 안될때. ㅋ (0) | 2010.06.29 |
---|---|
update 방법들 (0) | 2010.06.16 |
◈ DB Link (오라클 원격DB 연결) (0) | 2010.05.13 |
Architecture (0) | 2010.05.04 |
도메인 인덱스(Domain Index) (0) | 2010.04.28 |