oracle 递归查询sys_connect_by_path()
时间: 2025-06-20 20:41:15 浏览: 12
### Oracle 使用 SYS_CONNECT_BY_PATH 进行递归查询
#### 语法说明
`SYS_CONNECT_BY_PATH` 是 Oracle 数据库中用于构建层次查询路径的一个伪列。此函数返回从根节点到当前行的连接字符串,其中各节点通过指定字符分隔。
- `START WITH`: 定义层次查询的起始条件。
- `CONNECT BY PRIOR`: 指定父子关系表达式,即如何从父记录找到子记录。
具体语法规则如下:
```sql
SELECT column_name, SYS_CONNECT_BY_PATH(column_name, delimiter) AS path
FROM table_name
START WITH condition_for_root_node
CONNECT BY PRIOR child_column = parent_column;
```
#### 示例演示
假设有一个部门表(dept),其中包括三个字段:`DEPT_ID`, `PARENT_DEPT_ID`, 和 `DEPT_NAME`。现在希望获取每个部门及其上级部门名称组成的路径。
```sql
CREATE TABLE dept (
DEPT_ID NUMBER,
PARENT_DEPT_ID NUMBER,
DEPT_NAME VARCHAR2(50)
);
INSERT INTO dept VALUES (1, NULL, '总公司');
INSERT INTO dept VALUES (2, 1, '市场部');
INSERT INTO dept VALUES (3, 1, '技术部');
INSERT INTO dept VALUES (4, 3, '开发组');
-- 查询结果展示部门间的隶属关系
SELECT
DEPT_ID,
DEPT_NAME,
SYS_CONNECT_BY_PATH(DEPT_NAME, '/') "Path"
FROM
dept
START WITH
PARENT_DEPT_ID IS NULL
CONNECT BY PRIOR
DEPT_ID = PARENT_DEPT_ID;[^1]
```
上述 SQL 将会输出类似于下面的结果集:
| DEPT_ID | DEPT_NAME | Path |
|---------|-----------|--------------------|
| 1 | 总公司 | /总公司 |
| 2 | 市场部 | /总公司/市场部 |
| 3 | 技术部 | /总公司/技术部 |
| 4 | 开发组 | /总公司/技术部/开发组 |
该例子展示了如何利用 `SYS_CONNECT_BY_PATH` 函数来创建一个由各个层级构成的路径字符串,并且可以清晰地看到每一个部门与其上层管理部门之间的关联。
阅读全文
相关推荐

















