oracle中prior关键字的作用

oracle树中prior的用法    
在oracle生成树时,prior起了至关重要的作用,它决定了书的遍历方向。下面用例子分别阐述之:   
1、prior放在子节点方向 (所谓子节点方向是指关联字段中作为子的字段,这里是EMPNO字段,对应父节点方向是指关联字段中作为父的字段,这里指MGR字段)
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE FROM EMP
CONNECT BY PRIOR EMPNO=MGR 4* START WITH ENAME=‘JONES‘

EMPLOYEE
------------------------------------------------------------

JONES
JONES->SCOTT
JONES->SCOTT->ADAMS JONES->FORD
JONES->FORD->SMITH
--从上面可以看出,如果prior放在子节点方向,则oracle会根据start with指定的节点作为根节点,从上往下遍
历基于指定节点的所有分支。它可能会对应多个分支。
--如果不指定start with,则oracle会把所有的节点都当成根节点分别往下遍历。 
--用以下方法查看以JONES为根节点的所有完整的分支
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE  FROM EMP
WHERE EMPNO NOT IN (SELECT MGR FROM EMP WHERE MGR IS NOT NULL)

CONNECT BY PRIOR EMPNO=MGR

START WITH ENAME=‘JONES‘

EMPLOYEE
------------------------------------------------------------

JONES->SCOTT->ADAMS

JONES->FORD->SMITH

2、prior放在父节点方向 
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE FROM EMP

CONNECT BY PRIOR MGR=EMPNO

START WITH ENAME=‘JONES‘

EMPLOYEE
------------------------------------------------------------

JONES
JONES->KING
--从以上结果可以看出,当prior放在父节点端时,oracle会根据start with执行的节点作为子节点,从下往上找
其对应的父节点,然后再根据找到的父节点找父节点的父节点,依此类推,直到找到根节点为止。
--我们也不难知道,这种情况下只可能有一个分支。 
--用以下方法查看以JONES为最低层子节点的完整的分支
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE  FROM EMP
WHERE MGR IS NULL
CONNECT BY PRIOR MGR=EMPNO

START WITH ENAME=‘JONES‘

EMPLOYEE
------------------------------------------------------------

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

时间: 2024-10-11 00:22:16

oracle中prior关键字的作用的相关文章

C++中explicit关键字的作用

转自:http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: class things{ public: things(const std::string&name =""): m_name(name),height(0),weight(

Java和C++中final关键字的作用和区别

Java中final关键字的作用: a.作用于类:不允许扩展该类,即不能用该类来定义子类. b.作用于方法:子类不能覆盖这个方法,但是可以被继承. 早期Java中,有程序员利用final来避免动态绑定带来的系统开销.现在这个功能主要由编译器来实现. c.作用于域:构造对象之后不能改变该域的值. d.作用于函数参数:可以读取,但是不能改变该参数. 注意:final类的所有方法自动成为final的,不包括域. 将方法或类声明为final主要目的是确保它们在子类中不会改变语义. String类就是一个

[转]Oracle中password file的作用及说明

在数据库没有启动之前,数据库内建用户是无法通过数据库来验证身份的 口令文件中存放sysdba/sysoper用户的用户名及口令允许用户通过口令文件验证,在数据库未启动之前登陆从而启动数据库 如果没有口令文件,在数据库未启动之前就只能通过操作系统认证. 使用Rman,很多时候需要在nomount,mount等状态对数据库进行处理所以通常要求sysdba权限如果属于本地DBA组,可以通过操作系统认证登陆如果是远程sysdba登陆,需要通过passwordfile认证. 1.remote_login_

Java中Native关键字的作用

阅读目录 一.认识 native 即 JNI,Java Native Interface 二.用 Java 调用 C 的"Hello,JNI" 三.JNI 调用 C 流程图 四.其他介绍 初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: 1 public native int hashCode(); 为什么有个native呢?这是我所要学习的地方.所以下面想要总结下native. 回到顶部 一.认识 native 即 JNI,Java N

java中volatitle关键字的作用

用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致 的情况.volatile就是用来避免这种情况的.volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A) =========================分割线1================================= 版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及

java中this关键字的作用

一.this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量: (2)this调用本类中的其他方法: (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行. Public Class Student { String name; //定义一个成员变量name private void SetName(String name) { //定义一个参数(局部变量)name this.name=name; //将局部变量的值传递给成员变量 } } 应用一:引用成

c/c++中static关键字的作用【转】

1.先来介绍它的第一条也是最重要的一条:隐藏.(static函数,static变量均可) 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.举例来说明.同时编译两个源文件,一个是a.c,另一个是main.c. //a.c char a = 'A'; // global variable void msg() { printf("Hello\n"); } //main.c int main() { extern char a; // extern varia

C#中base 关键字的作用

引用:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建派生类实例时应调用的基类构造函数. 基类访问只能在构造函数.实例方法或实例属性访问器中进行. 从静态方法中使用 base 关键字是错误的. 一.在本例中,基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法.通过使用 base 关键字,可以从派生类中调

Oracle中password file的作用及说明 orapwd命令的使用

在数据库没有启动之前,数据库内建用户是无法通过数据库来验证身份的 口令文件中存放sysdba/sysoper用户的用户名及口令允许用户通过口令文件验证,在数据库未启动之前登陆从而启动数据库 如果没有口令文件,在数据库未启动之前就只能通过操作系统认证. 使用Rman,很多时候需要在nomount,mount等状态对数据库进行处理所以通常要求sysdba权限如果属于本地DBA组,可以通过操作系统认证登陆如果是远程sysdba登陆,需要通过passwordfile认证. 1.remote_login_