动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.在复杂应用环境下监控 ORACLE 数.
.Oracle 10G 最佳20位新特性:物化.
.Oracle 数据库集中复制方法逐步精.
.10g不支持的Linux发行版上安装10.
.脱机备份与恢复实战.
.带你快速了解wait等待事件及其处.
.Linux x86安装Oracle数据库10g二.
.实例讲解批处理程序突然变慢的解.
.vi 文书处理软体.
.ORA-25153: 临时表空间为空.
.如何使sendmail支持大写的用户名.
.VB调用Oracle返回数据集.
.不让redo log日志组处于高激活状.
.Oracle9i 数据库管理实务讲座(七.
.各个平台上调整最大SGA区的方法.
.OO40编程教程.
.如何知道表记录最后被更新的时间.
.Oracle 9i 数据库异常关闭后的启.
.在ORACLE的存储过程中如何做简单.
.Oracle数据库的几个关闭方法与例.

深入了解Oracle 10g新型层次查询选项

发表日期:2008-2-9 |



  我们可以通过START WITH . . . CONNECT BY . . .子句来实现SQL的 层次查询,而Oracle 10g 为其添加许多了新的伪列。十多年以来,Oracle SQL 具有依照层次关系进行查询的功能。例如,你可以指定一个起始条件,然后根据一个或多个连接条件来确定孩子行的内容。 举例来说,现在假设我有一个表,里面记录了世界上的某些地区,其表结构如下:
  
  create table hier
  (
  parent varchar2(30),
  child varchar2(30)
  );
  
  insert into hier values(null,'Asia');
  insert into hier values(null,'Australia');
  insert into hier values(null,'Europe');
  insert into hier values(null,'North America');
  insert into hier values('Asia','China');
  insert into hier values('Asia','Japan');
  insert into hier values('Australia','New South Wales');
  insert into hier values('New South Wales','Sydney');
  insert into hier values('California','Redwood Shores');
  insert into hier values('Canada','Ontario');
  insert into hier values('China','Beijing');
  insert into hier values('England','London');
  insert into hier values('Europe','United Kingdom');
  insert into hier values('Japan','Osaka');
  insert into hier values('Japan','Tokyo');
  insert into hier values('North America','Canada');
  insert into hier values('North America','USA');
  insert into hier values('Ontario','Ottawa');
  insert into hier values('Ontario','Toronto');
  insert into hier values('USA','California');
  insert into hier values('United Kingdom','England');
  
  那么我们可以使用START WITH . . . CONNECT BY . . .从句将父级地区与孩子地区连接起来,并将其层次等级显示出来。
  
  column child format a40
  select level,lpad(' ',level*3)child child
  from hier
  start with parent is null
  connect by prior child = parent;
  
  LEVEL CHILD
  ---------- --------------------------
  1 Asia
  2 China
  3 Beijing
  2 Japan
  3 Osaka
  3 Tokyo
  1 Australia
  2 New South Wales
  3 Sydney
  1 Europe
  2 United Kingdom
  3 England
  4 London
  1 North America
  2 Canada
  3 Ontario
  4 Ottawa
  4 Toronto
  2 USA
  3 California
  4 Redwood Shores
  
  自从Since Oracle 9i 开始,就可以通过 SYS_CONNECT_BY_PATH 函数实现将从父节点到当前行内容以“path”或者层次元素列表的形式显示出来。 如下例所示:
  
  column path format a50
  select level,sys_connect_by_path(child,'/') path
  from hier
  start with parent is null
  connect by prior child = parent;
  
  LEVEL PATH
  -------- --------------------------------------------
  1 /Asia
  2 /Asia/China
  3 /Asia/China/Beijing
  2 /Asia/Japan
  3 /Asia/Japan/Osaka
  3 /Asia/Japan/Tokyo
  1 /Australia
  2 /Australia/New South Wales
  3 /Australia/New South Wales/Sydney
  1 /Europe
  2 /Europe/United Kingdom
  3 /Europe/United Kingdom/England
  4 /Europe/United Kingdom/England/London
  1 /North America
  2 /North America/Canada
  3 /North America/Canada/Ontario
  4 /North America/Canada/Ontario/Ottawa
  4 /North America/Canada/Ontario/Toronto
  2 /North America/USA
  3 /North America/USA/California
  4 /North America/USA/California/Redwood Shores
  
  在 Oracle 10g 中,还有其他更多关于层次查询的新特性 。
例如,有的时候用户更关心的是每个层次分支中等级最低的内容。那么你就可以利用伪列函数CONNECT_BY_ISLEAF来判定当前行是不是叶子。假如是叶子就会在伪列中显示“1”,假如不是叶子而是一个分支(例如当前内容是其他行的父亲)就显示“0”。下给出了一个关于这个函数使用的例子:
  
  select connect_by_isleaf,sys_connect_by_path(child,'/') path
  from hier
  start with parent is null
  connect by prior child = parent;
  
  CONNECT_BY_ISLEAF PATH
  ---------------------------------- ------------
  0 /Asia
  0 /Asia/China
  1 /Asia/China/Beijing
  0 /Asia/Japan
  1 /Asia/Japan/Osaka
  1 /Asia/Japan/Tokyo
  0 /Australia
  0 /Australia/New South Wales
  1 /Australia/New South Wales/Sydney
  0 /Europe
  0 /Europe/United Kingdom
  0 /Europe/United Kingdom/England
  1 /Europe/United Kingdom/England/London
  0 /North America
  0 /North America/Canada
  0 /North America/Canada/Ontario
  1 /North America/Canada/Ontario/Ottawa
  1 /North America/Canada/Ontario/Toronto
  0 /North America/USA
  0 /North America/USA/California
  1 /North America/USA/California/Redwood Shores
  
  在Oracle 10g 中还有一个新操作——CONNECT_BY_ROOT。 它用在列名之前用于返回当前层的根节点。如下面的例子,我可以显示出层次结构表中当前行数据所对应的最高等级节点的内容。
  
  select connect_by_root child,sys_connect_by_path(child,'/') path
  from hier
  start with parent is null
  connect by prior child = parent;
  
  CONNECT_BY_ROOT PATH
  ------------------------------ --------
  Asia /Asia
  Asia /Asia/China
  Asia /Asia/China/Beijing
  Asia /Asia/Japan
  Asia /Asia/Japan/Osaka
  Asia /Asia/Japan/Tokyo
  Australia /Australia
  Australia /Australia/New South Wales
  Australia /Australia/New South Wales/Sydney
  Europe /Europe
  Europe /Europe/United Kingdom
  Europe /Europe/United Kingdom/England
  Europe /Europe/United Kingdom/England/London
  North America /North America
  North America /North America/Canada
  North America /North America/Canada/Ontario
  North America /North America/Canada/Ontario/Ottawa
  North America /North America/Canada/Ontario/Toronto
  North America /North America/USA
  North America /North America/USA/California
  North America /North America/USA/California/Redwood Shores
  
  在Oracle 10g 之前的版本中,假如在你的树中出现了环状循环(如一个孩子节点引用一个父亲节点),Oracle 就会报出一个错误提示:“ ORA-01436: CONNECT BY loop in user data”。假如不删掉对父亲的引用就无法执行查询操作。而在 Oracle 10g 中,只要指定“NOCYCLE”就可以进行任意的查询操作。与这个要害字相关的还有一个伪列——CONNECT_BY_ISCYCLE, 假如在当前行中引用了某个父亲节点的内容并在树中出现了循环,那么该行的伪列中就会显示“1”,否则就显示“0”。如下例所示:
  
  create table hier2
  (
  parent number,
  child number
  );
  
  insert into hier2 values(null,1);
  insert into hier2 values(1,2);
  insert into hier2 values(2,3);
  insert into hier2 values(3,1);
  
  select connect_by_iscycle,sys_connect_by_path(child,'/') path
  from hier2
  start with parent is null
  connect by nocycle prior child = parent;

  
  CONNECT_BY_ISCYCLE PATH
  ------------------ -------
  0 /1
  0 /1/2
  1 /1/2/3
上一篇:Oracle高级技巧 人气:450
下一篇:用排序哈希簇来提升ORACLE查询速度 人气:434
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成