【每日积累】-oracle之connect by 002

1. hierarchical query 语义分析:

2. hierarchical query 脚本测试:

---删除已存在表

drop table test;
-- Create table
create table TEST
(
  orgno  NUMBER(10) not null,
  deptno NUMBER(10),
  deptnm VARCHAR2(20)
);
---insert date
insert into test values(1,0,‘abc‘);
insert into test values(2,1,‘bcd‘);
insert into test values(3,2,‘cde‘);
insert into test values(1,3,‘def‘);
commit;

---select data
select t.orgno,t.deptno,t.deptnm from TEST t  ;

---test connect by function:下面脚本涵盖connect by 所有关键字功能测试。
select t.*, level as l, connect_by_iscycle as iscycle,sys_connect_by_path(t.orgno,‘\‘), CONNECT_BY_ROOT t.deptnm from TEST t  
where level <= 3 /*and connect_by_isleaf = 1*/
start with t.orgno = 1
connect by nocycle prior t.orgno = t.deptno
/*group by orgno,connect_by_iscycle,level;*/

---reset database
drop table test;

时间: 2024-10-07 17:17:11

【每日积累】-oracle之connect by 002的相关文章

oracle使用connect by进行级联查询 树型菜单

Oracle使用connect by进行级联查询 树型菜单(转) connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点. 来看一个示例,现假设我们拥有一个菜单表t_menu,其中只有三个字段:id.name和parent_id.它们是具有父子关系的,最顶级的菜单对应的parent_id为0.现假设我们拥有如下记录: id name parent_id 1 菜单01 0 2 菜单02 0 3 菜单03 0 4 菜单0101 1 5 菜单0102

oracle中 connect by prior 递归算法

http://blog.163.com/xxciof/blog/static/7978132720095193113752/ oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with 条件1 connect by 条件2 where 条件3; 例: select * from ta

oracle中 connect by prior 递归算法 -- 理解

http://blog.163.com/xxciof/blog/static/7978132720095193113752/ oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with 条件1 connect by 条件2 where 条件3; 例: select * from ta

【每日积累】-oracle之触发器001

触发器实现功能: 当向表A中插入一行数据时,同时往表B中插入一条相关数据. ---创建测试样表create table person(pid number(10));create table task(tid number(10));---创建插入触发器:当插入表person时,自动插入task表create or replace trigger person_triggerafter insert on personfor each rowbegininsert into task value

oracle中Connect By用法介绍

为解决oracle中自连接查询不适合操作大表的情况,采用connect by 方式实现.oracle中可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 在结构化查询中应用. 基本语法: select ... from <TableName> where <Conditional1> connect by <Conditional2> start with <Conditional3> connect by

Oracle的Connect By理解

connect by中的条件就表示了父子之间的连接关系 比如 connect by id=prior pid,但如果connect by中的条件没有表示记录之间的父子关系那会出现什么情况? 常见的,connect by会在构造序列的时候使用select rownum from dual connect by rownum<xxx 代替早期版本的 select rownum from all_objects where rownum <xxx 我们注意到,dual是一个只有一条记录的表,如果表有

oracle中 connect by prior 递归查询

Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with 条件1 connect by 条件2 where 条件3; 例: select * from table start with org_id = 'HBHqfWGWPy' connect by prior org_id = parent_id; 简单说来是将一个树状结构存储在一张表里

oracle中connect by语句的优化

很多应用中都会有类似组织机构的表,组织机构的表又通常是典型的层次结构(没有循环节点).于是通过组织控制数据权限的时候,许多人都喜欢通过connect by获得组织信息,然后再过滤目标数据. 在有些情况下,这样写并没有什么问题,但有些情况下,这个就是一个大问题. 归根结底,这是connect by特性导致的,oracle无法知道connect by之后到底返回多少数据,所以有可能采取一些你所不期望的算法,结果自然不是你所期望的---非常慢. 下面,我就讨论在12.1.0.2中如果遇到这样的语句应该

每日积累 8.4

一. 1.mybatis或者ibatis向oracle插入数据的时候,如果参数中有null值,需要指定jdbcType类型的参数(注意大小写问题) 2.如果忽略contextConfigLocation此设定,则默认为"/WEB-INF/<servlet name>-servlet.xml",其中<servlet name>以Servlet 名替换 3.逻辑外键--在数据库表中没有明确的表示,但是在程序员看来就是外键.为了避免删除一个数据的时候需要删除与他相关联