动态网站制作指南 [  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教程 ]的信息



本月文章推荐
.如何自制 bootdisk.
.Linux_FAQ之六:疑难杂症.
.Oracle学习手册:新手常见错误小.
.Redhat9下安装Oracle 9.2.
.ORACLE的PL/SQL二.
.Oracle on Linux认证--IT认证完美.
.探讨ORACLE数据库的数据导入方法.
.可预见的Oracle应用程序性能调优.
.ORACLE常见错误代码的分析与解决.
.Oracle Index 的三个问题.
.[范例] 如何以表为数据源,导入成.
.Oracle9i的企业管理器介绍.
.ORACLE SQL性能优化系列 (十一).
.回滚段.
.Oracle9i中一个特殊等待事件--nu.
.oracle的文本导入、导出技巧.
.对于数据库系统中使用临时表的思.
.在非归档模式下如何更改数据文件.
.ORACLE 常用的SQL语法和数据对象.
.分区的情况下,对insert速度影响.

用Oracle8的层次查询生成BOM树的实现方法

发表日期:2008-2-9 |


最近收到网友一个问题,关于Oracle的层次查询的问题,发现Oracle 8i中一个非常有用的查询子句:
  select level,rowid,...
   from ...
   where ...
   start with ...
   connect by eXPression;
  语法说明:
  *****************************************************
  start with ...
  connect by
  (这是一个字句,不能拆开来写)
  语法的具体参考,请参考 ORACLE Release 8.0.5 Documentation Library中的 SELECT 帮助
  文件位置 doc\database.804\a58225\ch4l.htm
  简单说明:
  start with ... connect by : 建立一个层次查询("Hierarchical Queries")
  start with ... 子句:用户根记录的条件
  connect by   子句:用于子记录合父记录的连接方式。是一个特定的条件表达式,必须为其中之一:
   PRIOR expr comparison_operator expr
   expr comparison_operator PRIOR expr
  
  假如定义了start with... connect by子句,level就返回当前记录的层次号。
  *****************************************************
  
  这个语法通过定义一个cursor或视图就可以得到一个层次型的结果集,非常有用,非凡是对于象生产企业的EBOM树的生成而言,
  将明显改变BOM树生成的执行效率,因此,我将这个语法的内容做了分析:
  
  给定这样的数据:
    DOC_PR DOC_CH        TITLE                 
  --------- -------------------- -----------------------
     DOC  A          A类                   
      A  A2          A-2                   
      A  A3          A-3                   
      A  A1          A-1                   
      A1  A11         A1-1                  
     DOC  B          B类                   
      B  B1          B-1                   
      B  B2          B-2                   
      B  B3          B-3                   
      B3  B31         B-3-1                  
     DOC  C          C类                   
      C  C1          test C1                 
      
  定义一个cursor
  Declare curTree Cursor For       
   select level, doc_ch, title, rowid 
   from doc_tree          
   start with doc_pr = 'DOC'  
   connect by doc_pr = Prior doc_ch;
  
  返回结果集如下:
    LEVEL DOC_CH        TITLE                  ROWID
  -------- -------------------- ---------------------------------------- ------------------
      1 A          A类                   AAAAi+AADAAAAyNAAE
      2 A2          A-2                   AAAAi+AADAAAAyNAAM
      2 A3          A-3                   AAAAi+AADAAAAyNAAN
      2 A1          A-1                   AAAAi+AADAAAAyNAAP
      3 A11         A1-1                   AAAAi+AADAAAAyNAAS
      1 B          B类                   AAAAi+AADAAAAyNAAF
      2 B1          B-1                   AAAAi+AADAAAAyNAAO
      2 B2          B-2                   AAAAi+AADAAAAyNAAQ
      2 B3          B-3                   AAAAi+AADAAAAyNAAR
      3 B31         B-3-1                  AAAAi+AADAAAAyNAAB
      1 C          C类                   AAAAi+AADAAAAyNAAG
      2 C1          test C1                 AAAAi+AADAAAAyNAAC
     
  这段语法的ORACLE内部逻辑我分析如下:
  选择 level,doc_ch,title,rowid
  从 doc_tree
  以 doc_pr = "DOC"开始
  用 doc_pr = 上一个结果的 doc_ch来连接
  
  取出第一个结果集后, as_start自动转换为 当前行的 doc_ch,然后执行
  select level, doc_ch, title, rowid
   from doc_tree where doc_pr = prior doc_ch
  这样循环本层次结果集,然后再开始下一个结果集的处理。
  这是内部的逻辑,而返回给用户的是一个按层次完成的结果集
  
  有了这样一个结果集,对于建立treeview是非常方便的,只要循环所有记录就可以轻松实现了。
  效果
  
用Oracle8的层次查询生成BOM树的实现方法


  在Sybase,MS SQL Server中不知有没有这样的语法,我不是太清楚,假如您知道,请告诉我。
  
  现在我在MS SQL Server中的实现是这样的:
  加入字段level而不是伪列。实现原理同上面是一致的。
    
上一篇:安装Oracle后使用的修改表空间的SQL代码 人气:347
下一篇:在客户端处理Oracle的数据行加锁问题 人气:471
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-23 Menalto Gallery v2.3 Rc1 多国语
2008-7-23 深度学习网址导航系统 v2.6.1
2008-7-23 因特达crm2008客户关系管理系统
2008-7-23 60度 CMS v1.0 Build 080723
2008-7-23 幻影动漫网视频系统(Ppdong) v1.
2008-7-23 好易祝福墙 2008
2008-7-23 APJE私服发布系统 v2.0 PHP版
2008-7-23 毕业论文在线指导系统源码
2008-7-23 Jacky法律在线网站源码
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵