以前用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 ...
随机推荐
- jeecg表单页面控件权限设置(请先看官方教程,如果能看懂就不用看这里了)
只是把看了官方教程后,觉得不清楚地方补充说明一下: 1. 2. 3. 4.用"jeecgDemoController.do?addorupdate"这个路径测试,不出意外现在应该可 ...
- Android进程保活
Android进程回收机制 Low Memory Killer原理 微信团队原创分享:Android版微信后台保活实战分享(网络保活篇) 微信团队原创分享:Android版微信后台保活实战分享(进程保 ...
- 使用VS Code 从零开始开发并调试.NET Core 应用程序
最新文章:http://www.cnblogs.com/linezero/p/VSCodeNETCore.html 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一 ...
- 解决:/bin/bash: mvn: 未找到命令
在终端执行: sudo apt-get install maven
- Spring retry基本使用
Spring retry基本使用 背景介绍 在实际工作过程中,重试是一个经常使用的手段.比如MQ发送消息失败,会采取重试手段,比如工程中使用RPC请求外部服务,可能因为网络 波动出现超时而采取重试手段 ...
- iOS-不用网线搭建IPv6网络测试环境
前言 从6月1日开始苹果要求之后审核的项目必须支持iPv6,如果不支持将被拒绝,掘金最近一次审核被就被拒绝了....理由为下: Apps are reviewed on an IPv6 network ...
- HTML中超出文本使用省略号替代的CSS样式
a{ display: block; /*定义显示形式*/ overflow: hidden; /*截取超出字符*/ text-overflow: ellipsis; /*超出字符以…代替*/ whi ...
- webmagic 增量爬取
webmagic 是一个很好并且很简单的爬虫框架,其教程网址:http://my.oschina.net/flashsword/blog/180623 webmagic参考了scrapy的模块划分, ...
- Linux文件类型及如何查看,修改文件读写权限
现在使用 ls -l 命令,查看详细信息格式的文件列表,您将会看到如下内容: total 5drwxr-x--- 4 user group 4096 Mar 10 00:37 filenamed ...
- G-FAQ – Why is Bit Depth Important?
直接抄: https://apollomapping.com/2012/August/article15.html For this month’s Geospatial Frequently Ask ...