Oracle 11g中CTE应用示例
关于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

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The function in Oracle to calculate the number of days between two dates is DATEDIFF(). The specific usage is as follows: Specify the time interval unit: interval (such as day, month, year) Specify two date values: date1 and date2DATEDIFF(interval, date1, date2) Return the difference in days

The retention period of Oracle database logs depends on the log type and configuration, including: Redo logs: determined by the maximum size configured with the "LOG_ARCHIVE_DEST" parameter. Archived redo logs: Determined by the maximum size configured by the "DB_RECOVERY_FILE_DEST_SIZE" parameter. Online redo logs: not archived, lost when the database is restarted, and the retention period is consistent with the instance running time. Audit log: Configured by the "AUDIT_TRAIL" parameter, retained for 30 days by default.

The Oracle database startup sequence is: 1. Check the preconditions; 2. Start the listener; 3. Start the database instance; 4. Wait for the database to open; 5. Connect to the database; 6. Verify the database status; 7. Enable the service (if necessary ); 8. Test the connection.

The INTERVAL data type in Oracle is used to represent time intervals. The syntax is INTERVAL <precision> <unit>. You can use addition, subtraction, multiplication and division operations to operate INTERVAL, which is suitable for scenarios such as storing time data and calculating date differences.

To find the number of occurrences of a character in Oracle, perform the following steps: Get the total length of a string; Get the length of the substring in which a character occurs; Count the number of occurrences of a character by subtracting the substring length from the total length.

Oracle database server hardware configuration requirements: Processor: multi-core, with a main frequency of at least 2.5 GHz. For large databases, 32 cores or more are recommended. Memory: At least 8GB for small databases, 16-64GB for medium sizes, up to 512GB or more for large databases or heavy workloads. Storage: SSD or NVMe disks, RAID arrays for redundancy and performance. Network: High-speed network (10GbE or higher), dedicated network card, low-latency network. Others: Stable power supply, redundant components, compatible operating system and software, heat dissipation and cooling system.

The amount of memory required by Oracle depends on database size, activity level, and required performance level: for storing data buffers, index buffers, executing SQL statements, and managing the data dictionary cache. The exact amount is affected by database size, activity level, and required performance level. Best practices include setting the appropriate SGA size, sizing SGA components, using AMM, and monitoring memory usage.

Oracle uses the "||" symbol to concatenate strings. The usage method is as follows: connect the strings to be connected with the "||" symbol; the priority of string connection is low, and parentheses need to be used to ensure the priority; an empty string will still be an empty string after connection; NULL value connection is still NULL.
