- 浏览: 470442 次
文章分类
最新评论
-
datawarehouse:
来学习了。
什么是informatic? -
nange223:
感谢分享,学习了
一些数据库监控,优化,管理工具 -
pianxibin:
ertrth thr dj dyj
一些数据库监控,优化,管理工具 -
gekky6:
多谢分享,学习下
一些数据库监控,优化,管理工具 -
lqlein:
好好学习学习
一些数据库监控,优化,管理工具
http://hi.baidu.com/heerit/blog/item/1f0235d99dcc022e11df9b91.html
为了更好的查询一个树状结构的表,在Oracle的PL/SQL中提供乐一个诱人的特性——CONNECT BY子句。它大大的方便了我们查找树状表:遍历一棵树、寻找某个分支......,但还是存在一些不足。在Oracle 10G,就对这个特性做了增强。下面就举例说明一下。 |
CONNECT_BY_ISCYCLE
树状一般都是在一条记录中记录一个当前节点的ID和这个节点的父ID来实现。但是,一旦数据中出现了循环记录,如两个节点互为对方父节点,系统就会报ORA-01436错误,例如:
- 如果有这样的数据
insert into t_tonedirlib(dirindex, fatherindex, dirname, status) values (666, 667, '123', 5); insert into t_tonedirlib(dirindex, fatherindex, dirname, status) values (667, 666, '456', 5);
- 执行这样的查询
select dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlib start with fatherindex = 666 connect by fatherindex = prior dirindex;
- 结果是 ORA-01436: 用户数据中的 CONNECT BY 循环。
10G中,可以通过加上NOCYCLE关键字避免报错。并且通过CONNECT_BY_ISCYCLE属性就知道哪些节点产生了循环
select CONNECT_BY_ISCYCLE, dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname
from t_tonedirlib
start with fatherindex = 666
connect by NOCYCLE fatherindex = prior dirindex
CONNECT_BY_ISCYCLE DIRINDEX FATHERINDEX RPAD(' ',2*(LEVEL-1))||dirname
;
----------------- ---------------- ---------------------------------
0 667 666 456
1 666 667 123
2 rows selected
CONNECT_BY_ISLEAF
查找树状表中的叶子节点不是件容易事。可以给表增加了一个字段来描述这个节点是否为叶子节点来解决问题,但这样做有很大的弊端:需要通代码逻辑来保证这个字段的正确性。
Oracle 10G中提供了一个新特性 CONNECT_BY_ISLEAF 来解决这个问题。简单点说,这个属性结果表明当前节点在满足条件的查询结果中是否为叶子节点, 0不是,1是。
select CONNECT_BY_ISLEAF, dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlib start with fatherindex = 0 connect by fatherindex = prior dirindex CONNECT_BY_ISLEAF DIRINDEX FATHERINDEX RPAD(' ',2*(LEVEL-1))||dirname
- 查询结果清晰明了!
----------------- ---------------- --------------------------------- 0 1 0 中文经典 0 52 1 kkkkkkk 1 70 52 222 1 58 52 sixx 1 59 52 seven 1 69 52 uiouoooo 1 55 52 four 1 7 1 流行风云 0 8 1 影视金曲 1 1111 8 aaa 1 1112 8 bbb 1 1113 8 ccc 1 9 1 古典音乐 0 81 1 小熊之家 1 104 81 龙珠 1 105 81 snoppy 1 101 81 叮当1 1 102 81 龙猫 1 103 81 叮当2 0 2 0 热门流行 1 31 2 有奖活动 1 32 2 相约香格里拉 1 50 2 新浪彩铃 0 3 0 老歌回放 1 333 3 老电影 1 335 3 怀旧金曲
发表评论
-
oracle分析函数row_number() over()使用
2009-12-24 16:00 2351row_number() over ([partition ... -
深入sql之merge into
2009-07-10 22:37 2237http://nodonkey.iteye.com/blog/ ... -
Oracle字符集问题总结(转)
2009-07-10 15:53 1089经常有同事咨询oracle数据库字符集相关的问题,如在不 ... -
minus/not in/not exists的原理和效率
2009-07-06 14:57 2993http://www.itpub.net/viewthread ... -
批量获取多个表的创建索引语句
2009-06-08 09:48 1605批量获取多个表的创建索引语句 一个朋友提供的set ec ... -
Truncate table,Delete,与Drop table的区别
2009-06-06 15:33 4576TRUNCATE TABLE 在功能上与不带 WHERE 子句 ... -
oracle cast() 函数问题
2009-06-02 15:03 12995SQL> create table t1(a varch ... -
db2中decimal实现oracle中trunc的方法
2009-06-02 15:00 3286在oracle中trunc的使用方法: 1.TRUNC(fo ... -
oracle是如何工作的(一个有趣的故事)
2009-06-01 14:12 1204转自http://bbs3.chinaunix.net/v ... -
表约束的巧用
2009-06-01 14:08 8041、问题: 表中的一個欄位,現在是VARCHAR2(8)型的 ... -
BLOB和CLOB区别和定义
2009-06-01 11:16 10221BLOB和CLOB区别和定义 LON ... -
Oracle中忘记System和Sys密码后的处理方法
2009-05-06 21:21 1364Oracle提供两种验证方式,一种是OS验证,另一种密码文件验 ... -
Oracle SQL*Loader 使用指南(解决插入大量的数据)
2009-04-27 11:21 1611我的理解; 如果表的属性是NOLOGG ... -
数据字典——数据库概念
2009-04-24 09:37 1524来自:http://yangtingkun.itpub.net ... -
创建连接服务器
2009-03-30 10:53 866一般的方法是:oracle->Net manager 还 ... -
JIRA
2009-03-13 13:57 1152在cmcs學到的系統JIRA+SVN+Fisheye+Cruc ... -
Study Oracle Document Website
2009-03-12 09:32 1181http://www.siue.edu/~dbock/cmis ... -
查看表占用多少M
2009-03-03 13:40 895SQL> SELECT d.status "S ... -
汉字和字符分开(整理)--补充(所用函数说明)
2009-03-02 17:17 19111、substr() substr('This is ... -
汉字和字符分开(整理)
2009-03-02 17:11 1234SQL> create table gjtext 2 ...
相关推荐
Oracle数据库中的`CONNECT BY PRIOR`是一个强大的查询构造器,用于处理树形数据结构,尤其在组织层级、部门结构或者员工管理系统中非常常见。这个功能允许我们从一个或多个根节点开始,按照指定的规则遍历整个树结构...
### Oracle 10g 常用命令:数据库的备份与恢复 #### 一、基础知识与环境准备 在深入探讨 Oracle 10g 数据库的备份与恢复之前,我们需要了解一些基本概念和环境配置。 ##### 1. 连接到 Oracle 10g 数据库 - **连接...
### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...
Oracle数据库中的`connect by prior`是一个强大的SQL查询构造,用于处理具有层级关系的数据,常见于组织结构、部门层级、时间序列分析等场景。这个特性允许我们遍历和查询树形结构,将层次数据平展为一行一列的形式...
在 Oracle 10g 中,引入了新的伪列函数 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF 和 CONNECT_BY_ISCYCLE,以增强层次查询的能力。 CONNECT_BY_ROOT 函数可以用来获取当前行的根节点,例如: ```sql SELECT CONNECT_BY_...
Oracle的Connect By子句是处理层次数据的核心工具。它允许我们指定一个层级关系的起始点,并按照指定的规则递归地遍历整个树。基本语法如下: ```sql SELECT column_list FROM table_name START WITH condition ...
### 精通Oracle 10g PL/SQL编程学习笔记 #### 一、PL/SQL综述 **1.1 PL/SQL的功能与作用** PL/SQL (Procedural Language for SQL) 是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据处理能力与过程化...
Oracle的`CONNECT BY LEVEL`是数据库查询中用于构建层次结构数据的一种强大工具,尤其是在处理具有层级关系的数据时,如组织架构、产品分类等。本文将深入探讨`CONNECT BY`子句以及`LEVEL`伪列的使用,以帮助你更好...
总结来说,`START WITH...CONNECT BY PRIOR`子句是Oracle SQL处理树形数据的关键工具,通过它可以有效地查询和展示层次关系的数据。理解并熟练运用这个子句,能够帮助你在处理具有层级结构的业务场景时更加游刃有余...
### Oracle中的START WITH CONNECT BY PRIOR 用法详解 #### 一、概念介绍 在Oracle数据库中,`START WITH` 和 `CONNECT BY PRIOR` 是两个非常强大的特性,主要用于处理具有层级结构的数据。这两个特性可以帮助我们...
文档中提到,出现这些错误的上下文是在尝试从Oracle 10g R2建立到Oracle 11g R1的新数据库连接时。在Oracle 11g版本中,默认情况下用户密码是区分大小写的,这与早期版本如Oracle 10g中的默认设置不同。当从低版本...
`GROUP BY` 和 `HAVING` 子句是SQL中的基础工具,但在Oracle 10g中,你可以使用 `CUBE()`, `ROLLUP()`, `GROUPING SETS()` 进行多维度分析,创建更复杂的分组。`CONNECT BY` 用于构建层次结构,如组织结构或产品分类...
在Oracle数据库中,`Connect By Prior`子句是一种非常有用的工具,尤其在处理具有层次结构的数据时。它允许用户以一种简洁的方式遍历树形结构的数据集。 #### 二、Connect By Prior 的基本语法 `Connect By Prior`...
在Oracle数据库中,`CONNECT BY` 是一个非常重要的SQL语法,用于构建层次查询,它能够帮助我们处理具有层级关系的数据,比如组织结构、产品分类、树形菜单等。`CONNECT BY` 查询允许从一个表中抽取数据,并按照指定...
在Oracle中,Connect By子句是专门用于处理层级数据查询的工具,尤其适用于管理树状结构或具有父子关系的数据。本文将探讨Oracle中的Connect By原理,并结合实例详细解释其工作方式及相关的语法和功能。 1. Connect...
其中,`START WITH`子句用于指定查询的起始节点,`CONNECT BY`子句用于指定查询的递归条件。 Connect By的执行原理 Connect By语句的执行原理可以用以下程序来说明: ```sql for rec in (select * from some_table...
Oracle的`CONNECT BY`和分析函数是数据库查询中的两种强大工具,主要用于处理复杂的数据结构和进行高级数据分析。本文将深入探讨这两种技术。 ### Oracle `CONNECT BY` 用法总结 `CONNECT BY` 是Oracle SQL中用于...
- **MSSQL与Oracle**:基本语法一致,但Oracle提供了更丰富的功能,如`WITH`子句用于定义子查询,以及`CONNECT BY`和`START WITH`用于层次查询。 综上所述,无论是命名规范还是具体的语法特性,Oracle与MS SQL ...
### Oracle数据库学习知识点详解 #### 一、基本使用 ##### 1.1 常用命令 **1.1.1 Connect/Disconnect数据库连接命令** - **用途:** 连接或断开与Oracle数据库的连接。 - **语法示例:** - `sqlplus username/...