Oracle 11g中CTE应用示例
oracle
sql
關於
應用
範例
关于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<p><img src="/static/imghw/default1.png" data-src="pic/20151007/sdsgj5s52f2.png" class="lazy" alt="Oracle 11g中CTE应用示例" ></p><p>2、--查询ORGID为2的机构包含所有子机构,且级别不大于3</p><pre class="brush:php;toolbar:false">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<p>3、--查找某个ORGID为12的部门对应的所有树级部门<br></p><pre class="brush:php;toolbar:false">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
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)