database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41448 게시물 읽기
No. 41448
DB2 CONNECT_BY_ISLEAF 오류로인한문제;;
작성자
초보입니다(kimsh520)
작성일
2017-08-04 11:50
조회수
6,225

SELECT LEVEL

,CONNECT_BY_ISLEAF IS_LEAF --> 이게 DB2에서 지원 안함

,EX.*

FROM (

SELECT C.PAR_MENU_ACT_ID

,B.MENU_ACT_ID

,A.DISPLAY_NM

,B.ACTIVE_MENU_IMAGE

,B.INACTIVE_MENU_IMAGE

,C.DISPLAY_ORDER

,(

SELECT E.WINDOW_ACT_ID FROM

( SELECT MENU_ACT_ID

, WINDOW_ACT_ID

FROM C_MENU_WINDOW_MAP

ORDER BY WINDOW_DEFAULT_YN DESC

, WINDOW_ACT_ID ASC

) E

WHERE ROWNUM = 1

AND E.MENU_ACT_ID = B.MENU_ACT_ID

) AS WINDOW_ACT_ID

FROM

C_GROUP_ROLE_MENU_ACT_AUTH D

,C_PKG_MENU_MAP C

,C_MENU_ACT B

,C_MENU_DISPLAY A

WHERE A.LANG_CD = 'ko-KR'

AND A.MENU_ACT_ID = B.MENU_ACT_ID

AND B.MENU_ACT_ID = C.MENU_ACT_ID

AND B.MENU_DISPLAY_YN = 'Y'

AND C.PKG_ID = D.PKG_ID

AND C.MENU_ACT_ID <> C.PAR_MENU_ACT_ID

AND D.PKG_ID = 6

AND D.PAR_MENU_ACT_ID = C.PAR_MENU_ACT_ID

AND D.MENU_ACT_ID = C.MENU_ACT_ID

AND D.GROUP_ID = 5

AND D.ROLE_ID = 7

AND D.ACCESS_YN = 'Y'

ORDER BY C.DISPLAY_ORDER

) EX

START WITH EX.PAR_MENU_ACT_ID='AML'

CONNECT BY PRIOR EX.MENU_ACT_ID=EX.PAR_MENU_ACT_ID;

 

CONNECT_BY_ISLEAF IS_LEAF 로인해 DB2에서 오류가나는데요 WITH문을 사용해서 계층 쿼리를 만들어야하는데 어떻게해야하는지 너무 모르겠습니다..

꼭 도와주시면 감사하겠습니다

이 글에 대한 댓글이 총 1건 있습니다.

몇가지 참고해서 테스트해본바를 말씀드립니다.

위의 쿼리를 단순화해서 보면 아래 처럼 될텐데요..

SELECT LEVEL, 
       connect_by_isleaf IS_LEAF, 
       EX.* 
FROM EX
START WITH EX.par_menu_act_id = 'AML' 
CONNECT BY PRIOR EX.menu_act_id = EX.par_menu_act_id; 
 
EX를 단순 테이블로 가정한다면 아래 처럼 할 수 있을 것 같습니다.
WITH n(menu_act_id, par_menu_act_id, level) AS 
          (SELECT menu_act_id, par_menu_act_id, 0 as LEVEL
             FROM EX
             WHERE EX.par_menu_act_id = 'AML' 
           UNION ALL
           SELECT nplus1.menu_act_id, nplus1.par_menu_act_id, LEVEL + 1
             FROM EX as nplus1, n
             WHERE n.menu_act_id = nplus1.par_menu_act_id)
SELECT LEVEL,
        COALESCE((SELECT 0 FROM EX 
                    WHERE n.menu_act_id = EX.par_menu_act_id
                    FETCH FIRST ROW ONLY), 1) AS isleaf 
  FROM n;
 
 
저도 찾아보고 테스트해본거라..  방법은 많을 것 같습니다..
정상규(pajama)님이 2017-08-04 13:24에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41451한개컬럼에 나오게 하고 싶을때 [2]
꼭결과를
2017-08-18
14506
41450오라클 유지보수 계약 문의.
지용이
2017-08-11
6158
41449Oracle 11g 리스너 문제 [2]
박태학
2017-08-10
6061
41448DB2 CONNECT_BY_ISLEAF 오류로인한문제;; [1]
초보입니다
2017-08-04
6225
41446otl 사용 시 merge 쿼리 질문 입니다.
김성민
2017-07-21
6298
41445숫자 타입 변환 문제 [4]
도와주세요.
2017-07-19
6514
41444두테이블 비교후 자식 레코드가 없는데이터만 삭제방법 [1]
칼로토
2017-07-14
6454
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다