Oracle 转 postgresql 递归 connect_by_isleaf 方案

oracle:

SELECT
        user_number,
        LTRIM( SYS_CONNECT_BY_PATH ( NAME, ‘,‘ ), ‘,‘ ) NAME
        ,RN
    FROM
        (
        SELECT
            u.user_number,
            r.NAME,
            ROW_NUMBER ( ) OVER ( PARTITION BY u.user_number ORDER BY ur.role_id ) RN
        FROM
            ems_role r,
            ( SELECT ur.user_id, ur.role_id FROM ems_user_role ur
            UNION SELECT ur.user_id, ur.role_id FROM ems_user_device_role ur ) ur,
            ems_user u
        WHERE
            ur.user_id = u.ID
            AND r.ID = ur.role_id
        )
    WHERE
        1=1
            and connect_by_isleaf = 1
        START WITH rn = 1 CONNECT BY RN - 1 = PRIOR RN
        AND user_number = PRIOR user_number 

postgresql

select user_number,name from
(
 select alias1.*,
 row_number() over (partition by alias1.user_number order by rn desc) as leaf
from (
with RECURSIVE cte as
        (
        select a.user_number,cast(A.name as varchar(1000)),A.rn from (
        SELECT
                    u.user_number,
                    r.NAME,
                    ROW_NUMBER ( ) OVER ( PARTITION BY u.user_number ORDER BY ur.role_id ) RN
                FROM
                    ems_role r,
                    ( SELECT ur.user_id, ur.role_id FROM ems_user_role ur
                    UNION SELECT ur.user_id, ur.role_id FROM ems_user_device_role ur ) ur,
                    ems_user u
                WHERE
                    ur.user_id = u.ID
                    AND r.ID = ur.role_id   ) A where a.rn = 1
        union all
        select k.user_number,cast(c.name||‘,‘||k.name as varchar(1000)) as path,k.rn from (SELECT
                    u.user_number,
                    r.NAME,
                    ROW_NUMBER ( ) OVER ( PARTITION BY u.user_number ORDER BY ur.role_id) RN
                FROM
                    ems_role r,
                    ( SELECT ur.user_id, ur.role_id FROM ems_user_role ur
                    UNION SELECT ur.user_id, ur.role_id FROM ems_user_device_role ur ) ur,
                    ems_user u
                WHERE
                    ur.user_id = u.ID
                    AND r.ID = ur.role_id) k inner join cte c on c.RN + 1 = k.rn and c.user_number = k.user_number
        )
    select e.* from cte e where 1=1
) as alias1 where 1=1
) as  alias2 where leaf =1

原文地址:https://www.cnblogs.com/acme6/p/12516041.html

时间: 2024-10-28 15:15:01

Oracle 转 postgresql 递归 connect_by_isleaf 方案的相关文章

MySQL,Oracle,PostgreSQL 数据库web维护管理软件

TreeSoft数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能包括:数据库的展示,库表的展示,表字段结构的展示, SQL语句的在线编辑批量执行,表结构的在线设计维护,数据的在线编辑维护,查询语句保存,JSON数据格式化,SQL语法帮助,在线数据源选择配置等.系统内置14套UI皮肤,45套代码编辑区UI方案,使用中可以依个人喜好选择配色方案. 本系统不但稳定,实

MySQL,Oracle,PostgreSQL通过web方式管理维护, 提高开发及运维效率

在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询分析器等.目前大家使用的大都是C/S单机版的客户端工具,要连数据库的电脑都要安装客户端工具, navicat还比较好安装,而Oracle客户端工具安装就比较麻烦了. 当对远程服务器的数据库进行访问管理时,特别是Linux服务器,都要开启相应端口,这样也增加了服务器的安全隐患,增加了工作量. 如果有基

【转帖】从 Oracle 到 PostgreSQL ,某保险公司迁移实践 技术实践

从 Oracle 到 PostgreSQL ,某保险公司迁移实践 http://www.itpub.net/2019/11/08/4108/ 信泰人寿保险股份有限公司 摘要:去O一直是金融保险行业永恒的话题,但去O的难度之大也只有真正经历过的人才知其中的艰辛.此次笔者结合实际去O工作,对去O过程中碰到的DBLINK.SEQUENCE最大值.空串.SQL语句中的别名等等近50个问题进行探讨,绝对是干货满满,诚意十足! 章晨曦(某保险公司技术经理) Oracle ACE-A,Oracle 10g O

postgresql集群方案参考答案

PostgreSQL配置Streaming Replication集群 http://www.cnblogs.com/marsprj/archive/2013/03/04/2943373.html postgresql集群方案hot standby初级测试(三)——蛋疼测试——手动同步数据 http://blog.csdn.net/lengzijian/article/details/7736961

PostgreSQL+pgpool-II复制方案

1. Pgpool-II介绍 pgpool-II是PostgreSQL服务器之间一种有效的中间件和PostgreSQL数据库客户端.它提供了以下功能. 连接池 pgpool-II保存到PostgreSQL服务器的连接,当一个相同新连接(如用户名.数据库.协议版本)进来时,重用他们.它减少了连接开销,提高了系统的整体吞吐量. 复制 pgpool-II可以管理多个PostgreSQL服务器.使用复制功能可以使2个或更多的物理磁盘上创建一个实时备份,这样服务不会因服务器的磁盘故障而中断. 负载平衡 如

oracle数据性能库优化方案精髓整理收集回顾

oracle数据库性能优化总体法则: 一.减少数据访问(减少硬盘房访问次数) 二.返回更少的数据(减少网络传输或磁盘访问) 三.减少交互次数(减少网络传输) 四.减少服务器开销(减少cpu及内存开销) 五.利用更多的资源(增加资源) ===================具体说明================= 一.减少数据访问(减少硬盘房访问次数) 1.减少数据访问 1.1.创建并使用正确的索引 索引会大大增加DML(增删改)的开销[合理的索引会大大提高效率100倍.1000倍,但不合理的索

Oracle实现POSTGRESQL的generate_series功能

PostgreSQL 有生成序列的函数,能够方便的进行造数据.这里我用ORACLE实现了PGSQL的generate_series函数功能.POSTGRESQL. t_girl=# select * from generate_series(1,10); generate_series ----------------- 1 2 3 4 5 6 7 8 9 10 (10 行记录) 时间:1.290 ms t_girl=# select * from generate_series(1,10,2)

配置Goldengate从Oracle到PostgreSQL的同步复制

1.平台环境 Oracle:rhel6.7+Oracle11.2.0.4  ip:192.168.56.2 PostgreSQL:rhel7.2+Pg9.6.1  ip:192.168.56.25 Goldengate:Goldengate12.2.0.1 for oracle和Goldengate 12.2.0.1 for PostgreSQL 2.Ogg配置 Oracle端: 直接安装goldengate for oracle 11g 配置环境变量 [[email protected] og

Oracle统一访问代理层方案

目标 提供一个oracle数据库统一访问代理层,统一管理所有oracle数据库用户名的连接池,让多个应用系统相同的数据库用户公用连接池以节省oracle服务器的总连接数,并且提供统一管理oracle能力. 由访问层维护后端oracle不同用户的连接池,应用通过jdbc协议告知访问层需要操作的数据库对象的用户名,访问层即从对应用户名的连接池中取出一条数据库连接执行sql.达到相同用户名连接复用效果.例如,user2&sql传入访问层,访问层engine定位到第一个oracle的user2用户名连接