#navi(ORACLE)
*階層問い合わせ [#u3cc11ad]

親組織コードのついた組織テーブルで、ある組織コード以下をすべて取得する SQL 文です。(階層問い合わせを使っています。)

** 組織テーブルを作ります。 [#g7947730]

 CREATE TABLE DIR
 (
     DCD                            VARCHAR2(10) NOT NULL,
     PCD                            VARCHAR2(10),
     DNAME                          VARCHAR2(30)
 )
 /
 COMMENT ON COLUMN DIR.DCD IS '組織コード'
 /
 COMMENT ON COLUMN DIR.PCD IS '親組織コード'
 /
 COMMENT ON COLUMN DIR.DNAME IS '組織名称'
 /

** データを入力します [#w545b754]

 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('0000',NULL,'組織0000');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A100','0000','組織A100');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A110','A100','組織A110');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A111','A110','組織A111');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A111-1','A111','組織A111-1');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A111-2','A111','組織A111-2');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('B100','0000','組織B100');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('B110','B100','組織B110');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('B111','B110','組織B111');
 INSERT INTO DIR (DCD, PCD, DNAME) VALUES('C100','0000','組織C100');

※ 以下のような構造の組織です

       +- A100 - A110 - A111 + A111-1
       |                     |
       |                     + A111-2
 0000 -+- B100 - B110 - B111
       |
       +- C100

** A100 以下の組織を取得 [#x83a3643]

 select * from DIR
 start with DCD='A100'
 connect by prior DCD = PCD
 /

 DCD        PCD        DNAME
 ---------- ---------- ---------------------
 A100       0000       組織A100
 A110       A100       組織A110
 A111       A110       組織A111
 A111-1     A111       組織A111-1
 A111-2     A111       組織A111-2

** A110 以下の組織を取得 [#u2e40e41]

 select * from DIR
 start with DCD='A110'
 connect by prior DCD = PCD
 /

 DCD        PCD        DNAME
 ---------- ---------- ---------------------
 A110       A100       組織A110
 A111       A110       組織A111
 A111-1     A111       組織A111-1
 A111-2     A111       組織A111-2

** 0000 以下の組織を取得 [#i8479303]

 select * from DIR
 start with DCD='0000'
 connect by prior DCD = PCD
 /

 DCD        PCD        DNAME
 ---------- ---------- ---------------------
 0000                  組織0000
 A100       0000       組織A100
 A110       A100       組織A110
 A111       A110       組織A111
 A111-1     A111       組織A111-1
 A111-2     A111       組織A111-2
 B100       0000       組織B100
 B110       B100       組織B110
 B111       B110       組織B111
 C100       0000       組織C100

#vote(参考になった[4],参考にならなかった[1])
#vote(参考になった[5],参考にならなかった[1])

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS