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
운영게시판
최근게시물
ALTIBASE Q&A 115 게시물 읽기
No. 115
altibase v4에서 siblings 안되나요?
작성자
조효성(coziny)
작성일
2008-06-23 15:21
조회수
10,110

안되서.. 지금 어떻게 할 까 고민중인데요..


혹시 먼저 이 문제에 도달해 보신분.. 있으시면 도움좀 ^^;;;

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

먼저,

현재 Altibase에서는 order siblings by 구문이 지원되지 않음을

말씀드립니다.  불편을 끼쳐 죄송합니다.


다만,  다음과 같이 workaround 방안을 제시해 드립니다.


오라클의 경우에도 order siblings by 구문은 9i버전부터 제공되어,

그 이전 버전에서는 stored procedure를 이용하여

간접적으로 그 구문을 구사하실 수 있습니다.


이와 동일하게 Altibase역시,

차후 해당 구문이 적용될 때까지는 Altibase의 stored procedure를 사용하여,

간접적으로 해당 구문을 구사하여야 할 것으로 보입니다.


방법은 다음과 같습니다.


1. 테이블 schema


      CREATE TABLE UNIVERSE

      ( PARENT VARCHAR2(30) REFERENCES UNIVERSE, 

      NAME  VARCHAR2(30) PRIMARY KEY );

     

2.  record insert


     INSERT INTO UNIVERSE VALUES ( NULL, 'WORLD' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'WORLD', 'EUROPE' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'EUROPE', 'ENGLAND' ) ;

     INSERT INTO UNIVERSE VALUES ( 'EUROPE', 'THE NETHERLANDS' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'EUROPE', 'GERMANY' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'WORLD', 'ASIA' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'ASIA', 'JAPAN' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'ASIA', 'CHINA' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'WORLD', 'AMERICA' ) ;

     INSERT INTO UNIVERSE VALUES ( 'AMERICA', 'UNITED STATES' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'AMERICA', 'MEXICO' ) ;

     INSERT INTO UNIVERSE VALUES ( 'WORLD', 'AFRICA' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'AFRICA', 'EGYPT' ) ; 

     INSERT INTO UNIVERSE VALUES ( 'AFRICA', 'MOROCCO' ) ;

 


3.  위의 자료를 다음과 같이 보고자 하는 경우


        WORLD

                AFRICA

                        EGYPT

                        MOROCCO

                AMERICA

                        MEXICO

                        UNITED STATES

                ASIA

                        CHINA

                        JAPAN

                EUROPE

                        ENGLAND

                        GERMANY

                        THE NETHERLANDS


     가) 오라클 9i의 경우 아래 쿼리를 이용하시면 가능합니다.


        SELECT SUBSTR( RPAD( ' ', LEVEL * 5) || NAME, 1, 40) "THE UNIVERSE"

               FROM UNIVERSE

               CONNECT BY PRIOR NAME = PARENT

               START WITH PARENT IS NULL

               ORDER SIBLINGS BY NAME;


     나) Altibase 경우, 아래와 같이 stored function을 create하신 후,

           그 function을 이용하면 가능합니다.


        CREATE OR REPLACE FUNCTION UNIVERSESORTORDER( PKEY UNIVERSE.NAME%TYPE )

             RETURN VARCHAR(100) IS

                PATH VARCHAR(100);

             BEGIN

                PATH := PKEY;

                -- INSERT ALL PREVIOUS PARENT RECORDS LIKE A DIRECTORY STRUCTURE

                -- E.G. WORLD/EUROPE/...

                DECLARE

                CURSOR C1 IS SELECT PARENT FROM UNIVERSE START WITH NAME = PKEY CONNECT BY PRIOR PARENT = NAME ;

                BEGIN

                   FOR CREC IN C1 LOOP

                       PATH := CREC.PARENT || '/' || PATH;

                   END LOOP;

                END;

       

               -- println('PATH '||PATH);

       

                RETURN PATH;

             END;

             /


        SELECT SUBSTR( RPAD( ' ', LEVEL * 5) || NAME, 1, 40) "THE UNIVERSE"

               FROM UNIVERSE

               CONNECT BY PRIOR NAME = PARENT

               START WITH PARENT IS NULL

               ORDER BY UNIVERSESORTORDER( NAME ) ;


그러나, 위의 workaroun를 사용하실 때 주의하실 점이 있습니다.


대상이되는 레코드가 많을 경우,

ORDER BY UNIVERSESORTORDER( NAME )  와 같은

order siblings by 대체 구문이 인덱스를 사용하지 못하고,

메모리에서 정렬이 됩니다.

따라서, 레코드 수가 많아 질 경우,

성능이 하락할 수 있으며, CPU Usage가 높아 질 수 있습니다.

이 점 유의하시어 사용하시면 고맙겠습니다.


그럼, 이만 줄이겠습니다.

좋은 하루되시요.

최한열(검은호랑이)님이 2008-07-08 10:06에 작성한 댓글입니다.

아 답변 정말 감사합니다.


미처 바쁜척하느냐고 방법고안도 못해보고 있었는데 정말 감사합니다.


코지니(coziny)님이 2008-07-08 17:32에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
119알티베이스에서 다른 테이블을 참조하는 업데이트가 가능한지 [1]
nobrain
2008-11-04
9394
118[오라클의 MERGE 같은 구문이 어떻게 적용을]
골빈당
2008-10-05
8953
116알티베이스에서 오라클로 변경할 수 있나요? [2]
최승우
2008-07-02
9859
115altibase v4에서 siblings 안되나요? [2]
조효성
2008-06-23
10110
114[투정성 잡담] 왜 게시판 이름이 MMDBMS? [5]
kumdory
2008-04-29
7317
112알티베이스 precompile에 unsafe_null기능은 없나요? [1]
러스스누피
2008-03-04
7838
111iloder 구분자 없애기요 [1]
초보
2008-02-11
7308
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다