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 21462 게시물 읽기
No. 21462
쿼리문장으로 계층구조를 표현하려고 합니다.
작성자
궁금이
작성일
2005-01-18 20:13ⓒ
2005-01-18 20:15ⓜ
조회수
3,603

코드테이블 구성은 아래와 같이 구성되어 있습니다.

1)

코드값 코드명 코드레벨 상위코드값
A 상세코드 0 A
A0001 상세코드-1 1 A
A0002 상세코드-2 1 A
A0003 상세코드-3 1 A
A0004 코드-1 2 A0001
A0005 코드-2 2 A0001
A0006 코드-3 2 A0001
A0007 코드-4 2 A0001
A0009 코드-2-1 2 A0002
A0010 코드-2-2 2 A0002
A0011 코드-3-1 3 A0009
A0012 코드-3-2 3 A0009
A0013 코드-4-1 4 A0012
A0014 코드-4-2 4 A0012


이 코드값을 가지고 아래 항목(트리목록)처럼 보여줘야 하는 쿼리문장구성이 잘 되지 않네요

참고로 오라클 버전의 8.1.6 입니다.

2)

레벨:  0         1               2              3                  4

   A 상세코드
              A0001 상세코드-1 
                                A0004 코드-1    
                                A0005 코드-2
                                A0006 코드-3
                                A0007 코드-4
              A0002 상세코드-2
                                A0009 코드-2-1
                                                A0011 코드 3-1
                                                A0012 코드 3-2
                                                                A0013 코드-4-1
                                                                A0014 코드-4-2
                                A0010 코드-2-2        
              A0003 상세코드-3


쿼리문을 작성)

select parentindex, codeindex, codename, codelevel from code
start with (codeindex like 'A%'
and (to_char(sysdate,'yyyymmdd') between eff_st_date and eff_end_date
or eff_end_date is null))
connect by prior codeindex = codelevel

이런식으로 쿼리하면 계층구조로 가져오지 못하네요..

 

2)번 형식으로 쿼리를 구성하는 방법을 부탁드립니다.

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

A 상세코드 0 A ☜ 이 부분 때문인거 같네여~

A코드의 상위 코드가 자신이 되다보니 트리형식의 계층구조를 못가져오는 거 같네여

 

코드값 코드명 코드레벨 상위코드값
A 상세코드 0 null

 

이렇게 데이타를 구성하고 query 해보세여~

 

 

^^;님이 2005-01-19 10:35에 작성한 댓글입니다. Edit

음.. 쿼리를 보니까.. 또 이상한 부분이...

 

connect by prior codeindex = codelevel  가 아니고...

connect by prior codeindex = 상위코드값  이 되어야 할 거 같네여~

 

select *
from code

where to_char(sysdate,'yyyymmdd') between eff_st_date and eff_end_date

or eff_end_date is null
connect by prior 코드값=상위코드값

start with 코드값 = 'A';

^^;님이 2005-01-19 10:42에 작성한 댓글입니다.
이 댓글은 2005-01-19 10:51에 마지막으로 수정되었습니다. Edit

^^님의 내용은 잘 보았습니다.

참고로 오라클 버전은 8.1.6 입니다

 

select *
from code

where to_char(sysdate,'yyyymmdd') between eff_st_date and eff_end_date

or eff_end_date is null
connect by prior 코드값=상위코드값

start with 코드값 = 'A';

 

이방식으로 하면 ORA-01436 : connect by의 루프가 발생되었습니다

라는 메세제가 나오네요. ^^;

 

오라클 8.1.6 버전에서는 안되는건가요..

다른 쿼리 방법이 있으면 부탁드립니다.

 

 

궁금이님이 2005-01-19 12:51에 작성한 댓글입니다. Edit

A 상세코드 0 A

부분에서 상위코드값 부부을 null 값으로 바꿔주시면 될 것 같습니다.

A 상세코드 0 NULL 

과 같은 형태로 말이죠..


 

 

김응준(eyejjang)님이 2005-01-19 14:31에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
214658.1.6에서 오라클 서비스가 "시작하는중"으로 나옵니다. 패치는 어떻게? [4]
정말급한이
2005-01-18
2681
21464java에서 Long 형에 데이터 insert, update, select [답] [1]
윤병찬
2005-01-18
7730
21463tokenizer같은 oracle 함수 [1]
sunny
2005-01-18
1947
21462쿼리문장으로 계층구조를 표현하려고 합니다. [4]
궁금이
2005-01-18
3603
21461쿼리문 조언을 구합니다. [3]
김세영
2005-01-18
1685
21460summary table 생성 질문 [1]
이런저런
2005-01-18
1401
21459PHP와 오라클 연동시 ORA-12514에러가 납니다. [1]
류기환
2005-01-18
2622
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다