热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle11g中CTE应用示例

关于SQLSERVER中的CTE中的CTE应用,请看这里:blog.csdn.netdownmoonarchive200910234715814.aspx其实,ORACLE的CTE语法完全一样,看示例:一、创建示例数据表如下:ViewCodedeclaretableExistedCountnumber;beginselectcount(1)in

关于SQL SERVER中的CTE中的CTE应用,请看这里:http://blog.csdn.net/downmoon/archive/2009/10/23/4715814.aspx 其实,ORACLE的CTE语法完全一样,看示例: 一、创建示例数据表如下: View Code declare tableExistedCount number; begin select count(1) in


关于SQL SERVER中的CTE中的CTE应用,请看这里:http://blog.csdn.net/downmoon/archive/2009/10/23/4715814.aspx

其实,ORACLE的CTE语法完全一样,看示例:

一、创建示例数据表如下:

View Code 
 declare 
       tableExistedCount  number; 
 begin 
       select count(1) into tableExistedCount  from user_tables where TABLE_NAME ='DemoOrganization';
       if   tableExistedCount =1   then 
          execute immediate ' drop table DemoOrganization cascade constraints';
       end   if; 
 end;
 
 /*==============================================================*/
 /* Table: DemoOrganization                                      */
 /*==============================================================*/
 create table DemoOrganization 
 (
    OrgID                NUMBER(20,0)         not null,
    OrgCode              VARCHAR2(100),
    OrgName              NVARCHAR2(100),
    OrgPath              VARCHAR2(500),
    ParentID             INTEGER,
    OLevel               INTEGER              default 0,
    OrderID              NUMBER(10,0),
    CurState             INTEGER              default 0,
    AddUser              VARCHAR2(50),
    AddTime              DATE,
    constraint PK_DEMOORGANIZATION primary key (OrgID)
 );
 
 comment on table DemoOrganization is
 '演示组织机构';
 
 comment on column DemoOrganization.OrgID is
 '机构ID';
 
 comment on column DemoOrganization.OrgCode is
 '机构编码';
 
 comment on column DemoOrganization.OrgName is
 '机构名称';
 
 comment on column DemoOrganization.OrgPath is
 '机构路径';
 
 comment on column DemoOrganization.ParentID is
 '上级ID';
 
 comment on column DemoOrganization.OLevel is
 '级别';
 
 comment on column DemoOrganization.OrderID is
 '排序';
 
 comment on column DemoOrganization.CurState is
 '当前状态';
 
 comment on column DemoOrganization.AddUser is
 '创建人';
 
 comment on column DemoOrganization.AddTime is
 '创建时间';

并插入测试数据:

View Code 
 drop sequence SEQ_DEMOORGANIZATION;
 -- Create sequence 
 create sequence SEQ_DEMOORGANIZATION
 minvalue 1
 maxvalue 999999999999999
 start with 1
 increment by 1
 cache 201;
 
 create or replace trigger TRI_SEQ_DEMOORGANIZATION
 before insert on DEMOORGANIZATION
 
 for each row
 begin
 select SEQ_DEMOORGANIZATION.NEXTVAL into:new.ORGID from dual;
 end;
 
 truncate table DEMOORGANIZATION;
 
 INSERT INTO DEMOORGANIZATION(ORGNAME,OLEVEL,ORGPATH,PARENTID ,ADDTIME ,ADDUSER, ORDERID  ,CURSTATE)
 select '组织机构1',1,'0',0,sysdate,'testUser',13,0  from dual union all
 select '组织机构2',1,'0',0,sysdate,'testUser',12,0  from dual union all
 select '组织机构3',1,'0',0,sysdate,'testUser' ,10,0  from dual union all
 select '组织机构4',2,'1',1,sysdate,'testUser' ,19,0  from dual union all
 select '组织机构5',2,'2',2,sysdate,'testUser' ,17,0  from dual union all
 select '组织机构6',3,'1/4',4,sysdate,'testUser' ,16,0  from dual union all
 select '组织机构7',3,'1/4',4,sysdate,'testUser' ,4,0  from dual union all
 select '组织机构8',3,'2/5',5,sysdate,'testUser' ,3, 0 from dual union all
 select '组织机构9',4,'1/4/6',6,sysdate,'testUser' ,5,0  from dual union all
 select '组织机构10',4,'1/4/6',6,sysdate,'testUser' ,63,0  from dual union all
 select '组织机构11',4,'1/4/6',6,sysdate,'testUser' ,83,0  from dual union all
 select '组织机构12',4,'2/5/8',8,sysdate,'testUser' ,3,0  from dual union all
 select '组织机构13',4,'2/5/8',8,sysdate,'testUser', 1,0  from dual;
 
 select * from DEMOORGANIZATION;

二、示例:

1、--查询ORGID为2的机构包含所有子机构,且级别不大于2

WITH SimpleRecursive(ORGNAME, ORGID, ORGPATH,PARENTID,OLEVEL)
    AS
(SELECT ORGNAME, ORGID, ORGPATH,PARENTID,0  FROM DEMOORGANIZATION WHERE ORGID = 2
UNION ALL
SELECT P.ORGNAME, P.ORGID, P.ORGPATH,P.PARENTID,P.OLEVEL+1
 FROM DEMOORGANIZATION  P  INNER JOIN
 SimpleRecursive A ON A.ORGID = P.PARENTID
)
SELECT sr.ORGNAME as ORGNAME, c.ORGNAME as PARENTIDName,sr.ORGPATH as PARENTIDCode
FROM SimpleRecursive sr inner join DEMOORGANIZATION c
on sr.PARENTID=c.ORGID
where c.OLEVEL<=2

2、--查询ORGID为2的机构包含所有子机构,且级别不大于3

SELECT ORGNAME as ORGNAME,
(Select ORGNAME from DEMOORGANIZATION s where c.PARENTID=s.ORGID) as PARENTNAME,
ORGPATH as ORGPATH,OLEVEL
from DEMOORGANIZATION c where ORGPATH like'2/%' and OLEVEL<=3

3、--查找某个ORGID为12的部门对应的所有树级部门

SELECT ORGID, OLEVEL, ORGNAME, PARENTID
  FROM DEMOORGANIZATION D
 START WITH ORGID IN (SELECT ORGID
                        FROM DEMOORGANIZATION
                       WHERE ORGID = 12
                         AND ROWNUM = 1)
CONNECT BY PRIOR D.PARENTID = ORGID;


4、--查找某个ORGID为12的部门对应的顶级部门

SELECT *
 FROM (SELECT FIRST_VALUE(ORGNAME) OVER(ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS FIRSTID
         FROM DEMOORGANIZATION
        START WITH ORGID = 12
       CONNECT BY PRIOR PARENTID = ORGID) T
WHERE ROWNUM = 1



助人等于自助! 3w@live.cn

推荐阅读
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • StoredProcedure “存储过程名” 的TextHeader 中存在语法错误
    修改存储过程的时候出现StoredProcedure“存储过程名”的TextHeader中存在语法错误出现这样的问题的解决方法(本人修改已成功)在创建存 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ... [详细]
  • 搜索引擎架构设计
    本文详细介绍了搜索引擎的主要组成部分,包括爬虫模块、索引模块和搜索模块。其中,索引模块采用了高效的二元分词技术进行数据存储,而搜索模块则基于ASP.NET框架实现了一个用户友好的界面和高效的搜索算法。 ... [详细]
  • ODB 2.1.0 版本现已推出,此更新引入了多项新功能,如通过访问器、修饰符、函数及表达式访问数据成员,支持虚拟数据成员,并允许在数据成员上直接定义数据库索引等。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • 本文详细介绍了Java Web项目的开发流程,从环境搭建到项目部署,为初学者和开发者提供了一套完整的指南。 ... [详细]
  • 本文介绍了在解决Hive表中复杂数据结构平铺化问题后,如何通过创建视图来准确计算广告日志的曝光PV,特别是针对用户对应多个标签的情况。同时,详细探讨了UDF的使用方法及其在实际项目中的应用。 ... [详细]
  • Backup Exec 11d 初学者使用心得与技巧
    随着企业应用程序的不断扩展,数据备份的需求日益增加。本文通过介绍Symantec Backup Exec 11d的实际应用体验,旨在为初学者提供一些实用的操作指南和建议。 ... [详细]
  • 本章探讨了数据类型及其操作的基本概念,深入讲解了数据抽象和抽象数据类型的重要性,以及它们如何支持面向对象的编程方式。通过实例展示了字符串复制的不同方法,并讨论了类定义对系统资源的影响。 ... [详细]
  • 本项目使用Java语言开发了一个基于B/S架构的指纹识别系统,该系统能够实现指纹的高效采集与精准识别,适用于多种安全认证场景。 ... [详细]
  • 本文转载自某知名技术博客,作者对市场上一些低质量电脑进行了深入分析,指出这些设备存在的问题及其可能带来的影响。 ... [详细]
author-avatar
天地菲人间_984
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有