oracle中如何编写树级代码

oracle

这是在2002年给一个制衣厂做系统的时候写的,请大家多批评指正!

create table Dept(
 DepartNO  varchar2(10),
   DepartName  varchar2(20),
 TopNo    varchar2(10));

insert into Dept values('001','懂事会','0');
insert into Dept values('002','总裁办','001');
insert into Dept values('003','财务部','001');
insert into Dept values('004','市场部','002');
insert into Dept values('005','公关部','002');
insert into Dept values('006','销售部','002');
insert into Dept values('007','分销处','006');
insert into Dept values('008','业务拓展处','004');
insert into Dept values('009','销售科','007');

CREATE TABLE TempDept
(
 TempdeptNo    char(4), /*部门编号*/
 TempdeptName   varchar2(20), /*部门名称*/
  UpperTempdeptNo  char(4), /*上级部门编号*/
  UpperTempdeptName  varchar2(20), /*上级部门名称*/
 TempdeptLevel   number(4) /*部门所处的级别*/
);

select departname
from dept
connect by prior departno=topno
start with topno='0';

select a.departname top ,b.departname next
from dept a,dept b
where a.departno=b.topno;

select lpad(departno,level*2+length(departno),'\')
from dept
start with topno='0'
connect by prior departno=topno;

select departno,departname,level ||'\'|| topno
from dept
start with topno='0'
connect by prior departno=topno;

select lpad(departno,level*2+length(departno),' ')
from dept
start with topno='0'
connect by prior departno=topno;

select lpad(departno,level*3,' ')
from dept
start with topno='0'
connect by prior departno=topno;

create or replace function GetLevel(TempNo varchar2)
return varchar2
IS
 Result  varchar2(20);
 cursor CurLevel(curTempNo varchar2)
 is
 select departNo
 from dept
 connect by prior departNo = TopNo
 start with TopNo = curTempNo;
begin
 open CurLevel;
 for v_sor in CurLevel(TempNo) loop
   Result:=Result || '/' || v_sor.curTempNo;
 end loop;
 return(Result);
 close CurLevel;
  dbms_output.put_line('success');
end GetLevel;

REM************************************************************
REM**********   生成部门之间形成的树结构     ******************
REM********** 功能:输入部门后自动产生该部门  ******************
REM**********      及其子部门之间的树关系()  ******************
REM********** 输入参数:部门编号ParaDeptId   ******************
REM************************************************************

CREATE OR REPLACE procedure getAllSubDeptId(ParaDeptId varchar2)
IS
    DeptNo1       varchar2(4);     /*存放部门编号*/
    UpperDeptNo1  varchar2(4);     /*存放该部门的上级部门编号*/
    UpperDeptNo2  varchar2(4);     /*存放查询同级上级部门编号*/
    UpperDeptNo3  varchar2(4);     /*存放查询的上级部门编号*/
       level         number;          /*部门所处级别*/
    DSql          varchar2(100);   /*动态SQL字符串*/
    CURSOR getDept IS
       select DepartNO,TopNo
       from dept
       where DepartNo != ParaDeptId;
BEGIN
 --DSql :='create table tempdept(TempdeptNo,TempdeptName,UpperTempdeptNo,
  --UpperTempdeptName,TempdeptLevel)';
 --EXECUTE IMMEDIATE DSql;
   DSql :='TRUNCATE TABLE TempDept';
   dbms_output.put_line(0);
   EXECUTE IMMEDIATE DSql;
   dbms_output.put_line(1);
   insert into TempDept values(ParaDeptId,Null,Null,Null,0);
   dbms_output.put_line(2);
   open getDept;
   fetch getDept into DeptNo1,UpperDeptNo1;
   WHILE ( SQLCODE = 0 )
   LOOP
      level := 1 ;
      UpperDeptNo3 := UpperDeptNo1;
      WHILE ( UpperDeptNo1 is NOT NULL )
      loop
         if (UpperDeptNo1 = ParaDeptId) then
            insert into tempdept           values(DeptNo1,NULL,UpperDeptNo3,NULL,level);
           exit;
        else
           UpperDeptNo2 := UpperDeptNo1;
           select topNo into UpperDeptNo1
           from  dept
           where Departno= UpperDeptNo2;
           if UpperDeptNo2 != UpperDeptNo1
    then
                level := level+1;
           end if;
         end if;
      END LOOP;
     fetch getDept into DeptNo1,UpperDeptNo1;
   END LOOP;
   close getDept;
END;
/

时间: 2024-11-02 08:35:08

oracle中如何编写树级代码的相关文章

在oracle中编写树级代码

oracle create table Dept( DepartNO  varchar2(10),   DepartName  varchar2(20), TopNo    varchar2(10)); insert into Dept values('001','董事会','0');insert into Dept values('002','总裁办','001');insert into Dept values('003','财务部','001');insert into Dept valu

教你在oracle中编写树级代码

这是在2002年给一个制衣厂做系统的时候写的,请大家多批评指正!  create table Dept( DepartNO  varchar2(10),   DepartName  varchar2(20), TopNo    varchar2(10)); insert into Dept values('001','董事会','0');insert into Dept values('002','总裁办','001');insert into Dept values('003','财务部','

微软在Vista中重编写了支持代码

微软周二修补了Windows.Office平台中的22项漏洞,其中包括一项Windows 7和Vista系统中的蓝牙技术漏洞,该漏洞可导致附近PC遭到劫持.在微软周二发布的4次更新公告中,只有一项被列为微软四级划分系统中最严重(critical)等级,其余三个被列为重要(important)等级.分析师表示,微软此次漏洞修复中最引人注目的一项就是严重级更新MS11-053,旧金山安全公司nCircle Security安全运营主管安德鲁·斯道姆斯(Andrew Storms)表示:"这个漏洞很诡

eclipse-在Eclipse中怎么编写一段代码可以自动找到想要的文件和打印出所在的路径?

问题描述 在Eclipse中怎么编写一段代码可以自动找到想要的文件和打印出所在的路径? 在Eclipse中怎么编写一段代码可以自动找到想要的文件和打印出所在的路径? 解决方案 http://blog.csdn.net/aotian16/article/details/5775778

db2和oracle中的树查询(递归查询)语句-

在db2和oracle中的对树的递归查询语句. 表结构: create table  MAIN_NODE ( MLA_ID               INTEGER     not null        ,   //节点ID MLA_ROOTID          INTEGER,                      //根节点ID MLA_PARENTID        INTEGER,                      //父节点ID MLA_NAME           

Oracle中的MD5加密详解_oracle

一.技术点  1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') a from Dual时,却有错误提示,看来该函数只能直接在程序包中调用,不能直接应用于SELECT语句. 2.Utl_Raw.Cast_To_Raw DBMS_OBFUSCATION_TOOLKIT.MD5返回的

gdn-要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中段描述符均放臵在全局描述符表 GDT 中。

问题描述 要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中段描述符均放臵在全局描述符表 GDT 中. 这个怎么弄啊 要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中.其中所有 段的段描述符均放臵在全局描述符表 GDT 中. 解决方案 具体来说可以这么实现: 在程序开始声明一个数据段? DSEG?,来描述这三个段的描述符,其中有代码段描述符CODEM,源数据段描述符 DATAS 和目标数据段描述符 DATAD,将它们相应的选择子分别定义为 CODEM_SEL,

数据库-Oracle中重复率很高的字段创建B树索引,为什么性能可以得到大幅提升

问题描述 Oracle中重复率很高的字段创建B树索引,为什么性能可以得到大幅提升 请教一个让我不解的问题: 我有一张表TT,数据大概是240W,其中的一个字段COL1的值只有'0'和'1'两个.现在有如下查询:SELECT COL2,SUM(NVL(COL3,0) * nvl(COL4,0)) FROM TT WHERE COL1 = '0' GROUP BY COL2; 在查询耗时大概是 50s. 为了提高性能,在TT表的COL1字段上创建了位图索引,查询耗时变为 2s 但是由于我需要对TT表

vb-Vb中在编写记事本时,如何编写页面设置代码?

问题描述 Vb中在编写记事本时,如何编写页面设置代码? Vb记事本,如何编写页面设置代码!求代码!求解答!页面设置!页面设置! 解决方案 页面设置不是公用对话框,你可以仿造记事本的那个,自己用窗体实现一个. 解决方案二: 我的记事本(vb编写的)