以前用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 ...
随机推荐
- Redis集群(三):主从配置一
一.本文目的 Redis的主从配置分为两篇文章,第一篇主要介绍了Redis主从配置的搭建过程及使用,第二篇主要说明各种情况下Redis主从状态,如Master挂掉,Slaver挂掉, ...
- Linux系统概述
1.Linux是一套免费使用 和自 由传播的类Unix操作系统. 这个系统是由世界各地的成千上万的程序员 设计和实现的.其目 的是建立不受任何商品化软件的版权制约的. 全世界都能自 由使用的Unix兼 ...
- 如何学好JAVA编程
我的思路: 1.我觉得先学学JSP,用纯JSP做个日记本简单的小系统,纯粹从语言层面上了解一些基 础知识,把tomcat玩熟了,就用记事本编就行,主要是熟悉,能够理解jsp运行机制.然 ...
- 数据存储_SQLite常用的函数
一.简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据 ...
- RESTEasy-Rest服务框架
什么是 RESTEasy RESTEasy 是 JBoss 的一个开源项目,提供各种框架帮助你构建 RESTful Web Services 和 RESTful Java 应用程序.它是 JAX-RS ...
- A:手把手教Wordpress仿站(基础)
安装源码 需要服务器有php环境(PHP,Mysql,Apeach/Ngnax) 我用的主机宝(环境一键安装工具) 打开后台突然出现这种情况 Briefly unavailable for sch ...
- ActiveMQ消息存储持久化
--------------------------------------------------------------------------------------------------- ...
- linux下实现在程序运行时的函数替换(热补丁)
声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的. ...
- 编译器 cc、gcc、g++、CC 的区别
gcc 是GNU Compiler Collection,原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C.C++.Objective-C.Ada.Fort ...
- Spring中的JdbcTemplate使用
1.引出SpringJDBC的概念 在学习JDBC编程时我们会感觉到JDBC的操作是多么繁琐,那么当我们学习的Hibernate框架时,我们感觉到数据库的操作也变非常简单,提高了开发效率.但是当使用H ...