説明
この関数は、ルートからノードまでの列値のパスを返します。CONNECT BY 条件で返される各行の列値は、指定された区切り文字で区切られます。
説明
この関数は階層クエリでのみ有効です。
構文
SYS_CONNECT_BY_PATH(column,'char')
パラメータの説明
| パラメータ | 説明 |
|---|---|
| column | 返されるデータの列名を指定します。CHAR、VARCHAR2、NCHAR、またはNVARCHAR2データ型を指定できます。 |
| char | 分隔文字を指定します。CHAR、VARCHAR2、NCHAR、またはNVARCHAR2データ型を指定できます。 |
戻り値の型
VARCHAR2 データ型を返します。
例
テーブル tbl1 を作成し、テストデータを挿入します。列 name の ABC はルート値であり、その他の値はノードです。列 name 内の値から ABC までのすべてのパスを照会します。
obclient> CREATE TABLE tbl1(z_id INT,name VARCHAR2(20),n_id INT);
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES(0,'ABC',''),
-> (1,'An',0),(2,'Bn',0),(3,'Cn',0),
-> (4,'A1',1),(5,'B1',2),(6,'C1',3),
-> (7,'C2',6),(8,'A2',4),(9,'B2',5),
-> (10,'A3',8),(11,'A4',10),(12,'B3',9);
Query OK, 13 rows affected
Records: 13 Duplicates: 0 Warnings: 0
obclient> COMMIT;
Query OK, 0 rows affected
obclient> SELECT * FROM tbl1;
+------+------+------+
| Z_ID | NAME | N_ID |
+------+------+------+
| 0 | ABC | NULL |
| 1 | An | 0 |
| 2 | Bn | 0 |
| 3 | Cn | 0 |
| 4 | A1 | 1 |
| 5 | B1 | 2 |
| 6 | C1 | 3 |
| 7 | C2 | 6 |
| 8 | A2 | 4 |
| 9 | B2 | 5 |
| 10 | A3 | 8 |
| 11 | A4 | 10 |
| 12 | B3 | 9 |
+------+------+------+
13 rows in set
obclient> SELECT z_id,name,n_id,SYS_CONNECT_BY_PATH(name, '/') "Path"
FROM tbl1
START WITH n_id IS NULL
CONNECT BY PRIOR n_id = z_id
ORDER BY z_id;
+------+------+------+---------------------+
| Z_ID | NAME | N_ID | Path |
+------+------+------+---------------------+
| 0 | ABC | NULL | /ABC |
| 1 | An | 0 | /ABC/An |
| 2 | Bn | 0 | /ABC/Bn |
| 3 | Cn | 0 | /ABC/Cn |
| 4 | A1 | 1 | /ABC/An/A1 |
| 5 | B1 | 2 | /ABC/Bn/B1 |
| 6 | C1 | 3 | /ABC/Cn/C1 |
| 7 | C2 | 6 | /ABC/Cn/C1/C2 |
| 8 | A2 | 4 | /ABC/An/A1/A2 |
| 9 | B2 | 5 | /ABC/Bn/B1/B2 |
| 10 | A3 | 8 | /ABC/An/A1/A2/A3 |
| 11 | A4 | 10 | /ABC/An/A1/A2/A3/A4 |
| 12 | B3 | 9 | /ABC/Bn/B1/B2/B3 |
+------+------+------+---------------------+
13 rows in set