oracle connect by函数的简单应用

最近接到一个需求,需要将dba_users下面的用户剔除掉一部分,然后合并并通过逗号分隔开!如果:user1,user2,user3......

这个需求本来可以通过oracle 的WMSYS.WM_CONCAT这个函数来实现,但是这个函数在9I中不存在,需要通过执行如下脚本创建。

@$ORACLE_HOME/rdbms/admin/owmctab.plb

@$ORACLE_HOME/rdbms/admin/owmaggrs.plb

@$ORACLE_HOME/rdbms/admin/owmaggrb.plb

 

但是这个WMSYS.WM_CONCAT函数不推荐使用,所以还是要靠sql代码来实现。

 

下面将我的代码贴出来,还请高手指点

select username
  from (select ltrim(sys_connect_by_path(username, ','), ',') username
          from (select t.username username,
                       row_number() over(order by t.username) rank
                  from (select USERNAME
                          from dba_users
                         where default_tablespace not in ('DBADATA', 'SYSAUX')
                           AND username not like 'COW%'
                           AND username not like 'DEV%'
                           AND username not like 'ORACLE%'
                           and username not like '%$%'
                           AND username not like 'I3_ORCL%'
                           AND USERNAME NOT IN
                               ('SYS', 'SYSTEM', 'OVSEE', 'PERFSTAT', 'OUTLN',
                                'WKSYS', 'SCOTT', 'WMSYS', 'CTXSYS', 'XDB',
                                'MDSYS', 'ORDSYS', 'ORDPLUGINS', 'ANONYMOUS',
                                'DMLBAK', 'DEPLOYOP', 'TOADEXP', 'TOAD',
                                'SQLTXPLAIN', 'SPOTLIGHT', 'GGMGR', 'FGLPA',
                                'FOGLIGHT', 'DGEXP', 'FACTUSERMGR', 'PUB_TEST',
                                'PUB_QUERY', 'SUPER_TEST', 'TOM', 'DIP',
                                'EDSOP', 'EXFSYS', 'LBACSYS', 'SOLIX')
                        MINUS
                        SELECT OA_NAME FROM DBMGR.FACTUSER_LIST) t)
        connect by rank - 1 = prior rank --最关键的就在这里通过递归调用不断的增加长度
         order by length(username) desc)
 where rownum = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值