以前用SQL实现的机构职能树,再看看
DECLARE
CNT NUMBER;
TMP VARCHAR2(20);
vtmp VARCHAR2(22);
ltmp1 VARCHAR2(1000);
ltmp2 VARCHAR2(22);
ltmp3 VARCHAR2(22);
ltmp4 VARCHAR2(22);
NTMP NUMBER;
CURSOR CSR_TEST IS
SELECT O.SWJG_BM, O.SJ_SWJG_BM
FROM DB_NEU.T_XT_ORG O
WHERE O.SWJG_BM NOT IN (SELECT T.SWJG_BM FROM DB_NEU.T_XT_SWJG_ZN T);
R_TEST CSR_TEST%ROWTYPE; BEGIN
SELECT COUNT(*)
INTO CNT
FROM DB_NEU.T_XT_ORG O
WHERE O.SWJG_BM NOT IN (SELECT T.SWJG_BM FROM DB_NEU.T_XT_SWJG_ZN T);
DBMS_OUTPUT.PUT_LINE(CNT);
OPEN CSR_TEST;
FETCH CSR_TEST
INTO R_TEST;
tmp:=r_test.swjg_bm; /*保存当前需要处理的机关*/
WHILE CNT > 0 LOOP
/*DBMS_OUTPUT.PUT_LINE( r_test.swjg_bm);*/
SELECT COUNT(*)
INTO NTMP
FROM DB_NEU.T_XT_SWJG_ZN T
WHERE T.SWJG_BM = R_TEST.SJ_SWJG_BM;
DBMS_OUTPUT.PUT_LINE('ntmp:' || NTMP);
WHILE NTMP <> 1 LOOP /*父亲节点没在职能表中,那么需要取父亲的父亲*/
DBMS_OUTPUT.PUT_LINE('cnt' || CNT);
SELECT NVL(O.SJ_SWJG_BM, O.SWJG_BM) /*顶级的话就取自己*/
INTO TMP
FROM T_XT_ORG O
WHERE O.SWJG_BM = R_TEST.SJ_SWJG_BM;
SELECT COUNT(*)
INTO NTMP
FROM DB_NEU.T_XT_SWJG_ZN T
WHERE T.SWJG_BM = tmp;
END LOOP;
/*DBMS_OUTPUT.PUT_LINE('cnt++' || CNT);*/
DBMS_OUTPUT.PUT_LINE('swjg_bm:' || tmp);
/*实际处理的代码begin*/
vtmp:=CHR(39)||tmp||CHR(39);
dbms_output.put_line('vtmp:'||vtmp);
SELECT /*O.SWJG_BM, O.SJ_SWJG_BM,*/ TTT.CC INTO ltmp1 /*, '00' AS ZN_DM*/
FROM T_XT_ORG O,
(SELECT CASE
WHEN TT.SWJG_BM =
(SELECT SWJG_BM
FROM (WITH TMP AS (SELECT O.*,
LEVEL LEV,
CONNECT_BY_ISLEAF LEAF
FROM T_XT_ORG O
START WITH O.SWJG_BM =
(SELECT SJ_SWJG_BM
FROM T_XT_ORG TA
WHERE TA.SWJG_BM =
vtmp)
CONNECT BY PRIOR
O.SWJG_BM = O.SJ_SWJG_BM)
SELECT * FROM TMP WHERE LEV = 1)
) THEN
CONCAT(CC, CHR(49))
WHEN LASTCODE < 56 THEN
CONCAT(SRC, CHR(LASTCODE + 1))
WHEN LASTCODE = 56 OR LASTCODE < 89 THEN
CONCAT(SRC, CHR(LASTCODE + 1))
WHEN LASTCODE = 89 OR LASTCODE < 121 THEN
CONCAT(SRC, CHR(LASTCODE + 1))
END CC,
vtmp AS SWJG
FROM (SELECT T.CC,
T.SWJG_BM,
SUBSTR(T.CC, -LENGTH(T.CC), LENGTH(T.CC) - 1) SRC,
ASCII(SUBSTR(T.CC, -1)) LASTCODE
FROM DB_NEU.T_XT_SWJG_ZN T
WHERE T.CC =
(SELECT MAX(ZZ.CC)
FROM DB_NEU.T_XT_SWJG_ZN ZZ
WHERE ZZ.SWJG_BM IN
(SELECT SWJG_BM
FROM (WITH TMP AS (SELECT O.*,
LEVEL LEV,
CONNECT_BY_ISLEAF LEAF
FROM T_XT_ORG O
START WITH O.SWJG_BM =
(SELECT SJ_SWJG_BM
FROM T_XT_ORG TA
WHERE TA.SWJG_BM =
vtmp)
CONNECT BY PRIOR O.SWJG_BM =
O.SJ_SWJG_BM)
SELECT *
FROM TMP
WHERE LEV =
(SELECT LEV
FROM TMP T
WHERE T.SWJG_BM = vtmp)
/*AND LEAF = 1*/
ORDER BY SWJG_BM ASC) TT
WHERE TT.SWJG_BM NOT IN (vtmp)
/***查出直系父亲**/
UNION ALL
SELECT SWJG_BM
FROM (WITH TMP AS (SELECT O.*,
LEVEL LEV,
CONNECT_BY_ISLEAF LEAF
FROM T_XT_ORG O
START WITH O.SWJG_BM =
(SELECT SJ_SWJG_BM
FROM T_XT_ORG TA
WHERE TA.SWJG_BM =
vtmp)
CONNECT BY PRIOR
O.SWJG_BM =
O.SJ_SWJG_BM)
SELECT *
FROM TMP
WHERE LEV = 1) ))) TT) TTT
WHERE O.SWJG_BM = TTT.SWJG;
/*end*/
/* dbms_output.putline('ltmp1:'||ltmp1||'ltmp2:'||ltmp2||'ltmp3:'||ltmp3||'ltmp4:'||ltmp4);*/
dbms_output.put_line('ltmp1:'||ltmp1);
CNT := CNT - 1;
/*END IF;*/
FETCH CSR_TEST
INTO R_TEST;
tmp:=r_test.swjg_bm;
END LOOP;
CLOSE CSR_TEST;
END;
以前用SQL实现的机构职能树,再看看的更多相关文章
- SQL优化 MySQL版 - B树索引详讲
SQL优化 MySQL版 - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...
- SQL学习笔记之B+树
0x00 概述 要描述清楚B+树,得先了解二叉查找数,平衡二叉树. 0x01 二叉查找树 任意节点,它的左子树如果不为空,那么左子树上所有节点的值都小于根节点的值:任意节点,他的右子树如果不为空,那么 ...
- SQL学习笔记之B+树的几点总结
本文主要以列表形式将B+树的特点以及注意点等列出来,主要参考<算法导论>.维基百科.各大博客的内容,结合自己的理解写的,如内容有不当之处,请各位雅正. 0x00 前言 B树是为磁盘或其他直 ...
- linq to sql 动态构建查询表达式树
通过Expression类进行动态构造lamda表达式. 实现了以下几种类型,好了代码说话: public Expression<Func<T, bool>> GetAndLa ...
- SQL - 获取多机构最近相同节点
-- Create Branches Table create table Branches ( BranchCode ) ,BranchName ) ,L0BCode ) ,L1BCode ) ,L ...
- LSM树——放弃读能力换取写能力,将多次修改放在内存中形成有序树再统一写入磁盘
LSM树(Log-Structured Merge Tree)存储引擎 代表数据库:nessDB.leveldb.hbase等 核心思想的核心就是放弃部分读能力,换取写入的最大化能力.LSM Tree ...
- Splay树再学习
队友最近可能在学Splay,然后让我敲下HDU1754的题,其实是很裸的一个线段树,不过用下Splay也无妨,他说他双旋超时,单旋过了,所以我就敲来看下.但是之前写的那个Splay越发的觉得不能看,所 ...
- hdu 1394 Minimum Inversion Number(这道题改日我要用线段树再做一次哟~)
Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...
- 查询获取所有数据库名及数据库中表的集合、数据库连接字符串(类生成器,暂时支持mysql,sql server,后期有oracle再更新)
现所在公司做项目开发时,经常会自己创建model类,网上的生成器也很多,完全满足自己的不太现实,所以感觉自己做一个更有底气,主要针对过程中的一些语句进行整理,也供其他人学习参考. 连接字符串: mys ...
随机推荐
- 递推 hdu 2048
t 关于错排 共n个数 第n个 和一个交换 其他n-2错排 (n-1)*z[n-2]; n-1个错排 第n个和n-1个交换 (n-1)*z[n-1]; 求和 然后概率的话要除n! 一个一个除 ...
- github-windows本地安装
Step1 准备工作 msysgit,下载地址为 http://msysgit.github.io/ . Eclipse IDE for Java EE Developers(必须是这个,自带Egit ...
- 教你一招:Win10系统如何正确卸载edge浏览器?
Edge浏览器作为Win10系统默认浏览器,尽管我们将其他浏览器设置为默认程序,但是有时候还是会自动弹出,非常的不爽,但是在控制面板中却又找不到卸载“Edge”浏览器的选项.下面小编就教大家卸载“Ed ...
- COGS439. [网络流24题] 软件补丁
[问题描述] 对于一个软件公司来说,在发行一个新软件之后,可以说已经完成了工作.但是实际上,许多软件公司在发行一个新产品之后,还经常发送补丁程序,修改原产品中的错误(当然,有些补丁是要收费的). 如某 ...
- SQL查询语句 常用示例
SQL语言的应用 1. 找出姓李的读者姓名和所在单位. 2. 列出图书库中所有藏书的书名及出版单位. 3. 查找高等教育出版社的 所有图书及单价,结果按单价降序排序. 4. ...
- 搭建maven项目
一.新建项目 点击"Maven Project",如果没有的话在"Other"里面 勾选这个选项,这样可以建立一个没有多余文件的简单项目(如果这个时候直接建立w ...
- <<< javascript地址栏,代码
不伤及服务器,可以用来测试项目效果 修改网页.不修改服务器端任何网页页面 javascript:document.body.contentEditable='true';document.design ...
- centos6 install mcrypt
Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_64/ Install epe ...
- Kakfa重连测试
在Kafak已启动的情况下: 发送端首次连接大概耗时400毫秒.后续消息发送都在1毫秒以下. 接收端首次连接大概耗时400-7000毫秒.后续消息接收都在1毫秒以下.(具体时间与topic中存留的消息 ...
- IntelliJ IDEA 15 在线激活地址
License server,直接输入http://www.iteblog.com/idea/key.php地址即可激活IntelliJ IDEA 15: