- 追加された行はこの色です。
- 削除された行はこの色です。
#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(参考になった[1],参考にならなかった[0])
#vote(参考になった[2],参考にならなかった[0])