델파이코딩_개발일지
PL/SQL 계층형 쿼리문으로 TREELIST 계층 구조 만들기
천재메기
2023. 2. 21. 17:45
* 쿼리문 구조 참고한 사이트 : https://tragramming.tistory.com/82
[Oracle] 계층형 쿼리 - START WITH ~ CONNECT BY 구문
오라클의 계층형 쿼리와 대표적인 계층형 쿼리 구문인 START~WITH 구문에 대해 이야기해보고자 한다. 먼저 계층형 쿼리가 무엇인지에 대해 알아본다. 계층형 쿼리? - 한 테이블에 담겨 있는 여러 레
tragramming.tistory.com
우리가 쓸 쿼리문은 START WITH CONNECT BY ~ PRIOR 구문이다.
select * from dep_info
start with UP_DEP_ID is null
connect by UP_DEP_ID = PRIOR DEP_ID
UP_DEP_ID = 상위 부서 코드
DEP_ID = 부서 코드
procedure TForm5.btn_load1Click(Sender: TObject);
var
Node : TCxTreeListNode;
begin
treelist1.Clear;
with qry_dep do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM DEP_INFO');
SQL.Add('START WITH UP_DEP_ID IS NULL'); // 부모컬럼은 널값으로 시작하는 최상위 데이터를 갖고
SQL.Add('CONNECT BY UP_DEP_ID = PRIOR DEP_ID'); // PRIOR 위치대로, 위에서 아래로 넓어지는 구조
Open; // 위 쿼리문은 계층형 구조를 불러오는 쿼리문 (부모 / 자식 계층이 있는 데이터)
First; // 포커스 위치 조정
while not eof do
begin
if FieldByName('UP_DEP_ID').IsNull then //상위부서코드가 널이면
begin
Node := treelist1.Add; // 노드를 추가하기
with Node do
begin
Values[0] := FieldByName('DEP_ID').AsString; //쿼리의 값을 불러오자, 스트링으로
Values[1] := FieldByName('UP_DEP_ID').AsString;
end;
end
else
begin // 아래는 텍스트로(상위노드값,위치) 노드를 찾아와서, 노드를 생성해주고
Node := treelist1.FindNodeByText(FieldByName('UP_DEP_ID').AsString, TreelistCol1);
if Node <> NIL then //노드가 비어있다면 거기에 하위 노드를 만들어준다는 것
begin
with Node.AddChild do
begin
Values[0] := FieldByName('DEP_ID').AsString;
Values[1] := FieldByName('UP_DEP_ID').AsString;
end;
end;
end;
next;
end;
treelist1.FullExpand;//불러오자마자 닫혀있었던 게층들을 쭉 펴주자!
end;
end;