oracle树中prior的用法

本文解析了prior在不同位置时对扫描树的影响。当prior置于子节点时,从指定或所有根节点开始向下扫描;置于父节点时,则从指定或所有最低层子节点向上扫描直至根节点。此方法适用于数据库查询优化及数据结构操作。

1)prior放在子节点端,则表示扫描树是以start with指定的节点作为根节点从上往下扫描
.可能对应一个或多个分支.
start with可以省略,如果省略,表示对所有节点都当成根节点分别进行遍历.

2)prior放在父节点端,则表示扫描树是以start with指定的节点作为最低层子节点,从下
往上扫描.顺序是子节点往父节点扫描,直到根节点为止,这种情况只能得到一个分支.
start with可以省略,如果省略,表示对所有节点都当成最低层子节点分别往根节点方向遍
历.

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10599713/viewspace-1007394/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10599713/viewspace-1007394/

### Oracle PRIOR 关键字的含义和用法 #### 1. PRIOR 的基本概念 在 Oracle 数据库中,`PRIOR` 是一个用于定义层次结构查询的关键字。它通常与 `CONNECT BY` 子句结合使用,以指定父子关系的方向[^1]。具体来说,`PRIOR` 确定了当前行与其父行之间的关联方式,从而影响分层查询的结果。 #### 2. PRIOR 的作用 `PRIOR` 的主要作用是明确层次结构中数据的流向。通过将 `PRIOR` 放置在等式的左侧或右侧,可以定义从父到子或从子到父的关系[^2]。例如: - 当 `PRIOR` 出现在子节点字段的一侧时,表示从子节点追溯到父节点。 - 当 `PRIOR` 出现在父节点字段的一侧时,表示从父节点向下查找子节点。 #### 3. 使用示例 以下是一个典型的分层查询示例,展示如何使用 `PRIOR` 定义父子关系: ```sql SELECT LEVEL, empno, ename, mgr FROM scott.emp START WITH mgr IS NULL CONNECT BY PRIOR empno = mgr; ``` - `START WITH`:指定查询的起点,即根节点。在此示例中,`mgr IS NULL` 表示没有上级的员工(通常是 CEO 或顶级管理者)[^1]。 - `CONNECT BY`:定义层次结构中的父子关系。`PRIOR empno = mgr` 表示当前行的 `empno` 是其父行的 `mgr`[^2]。 #### 4. PRIOR 的方向性 `PRIOR` 可以出现在等式的左侧或右侧,具体取决于需要定义的关系方向: - **从父到子**: ```sql CONNECT BY PRIOR child_column = parent_column; ``` 这里表示 `child_column` 是子节点,`parent_column` 是父节点。 - **从子到父**: ```sql CONNECT BY PRIOR parent_column = child_column; ``` 这里表示 `parent_column` 是父节点,`child_column` 是子节点。 #### 5. 处理循环引用 当数据中存在循环引用时,`CONNECT BY` 查询可能会导致错误。为了解决这一问题,可以使用 `NOCYCLE` 参数。`NOCYCLE` 允许查询即使在检测到循环时也能继续执行,并通过伪列 `CONNECT_BY_ISCYCLE` 标识出循环节点[^3]。 以下是一个包含循环的示例查询: ```sql SELECT LEVEL, id, parent_id, name, CONNECT_BY_ISCYCLE AS is_cycle FROM hierarchy START WITH parent_id IS NULL CONNECT BY NOCYCLE PRIOR id = parent_id; ``` - `NOCYCLE`:允许查询即使在检测到循环时也能继续执行。 - `CONNECT_BY_ISCYCLE`:返回值为 `1` 表示该行包含循环,返回值为 `0` 表示正常节点。 #### 6. 实际应用场景 `PRIOR` 常用于查询具有层级结构的数据,例如组织架构、分类目录或文件系统。以下是一个多级菜单的层级结构查询示例: ```sql SELECT ID, NVL(TO_CHAR(PARENT_ID), 'NULL') PARENT_ID, MODULE_NAME, BS_URL, ICON, ORDER_NO, IS_VISIBLE, SYS_CONNECT_BY_PATH(MODULE_NAME, '/') PATH FROM SM_MODULE START WITH PARENT_ID IS NULL CONNECT BY PRIOR ID = PARENT_ID; ``` 此查询展示了如何通过 `PRIOR` 和 `CONNECT BY` 构建状结构的菜单列表[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值