繁体   English   中英

Oracle Database 10g:收集,强制转换以进行字符串聚合

[英]Oracle Database 10g: collect, cast for string aggregation

我正在尝试使用collectcast进行字符串聚合,类似于Oracle Database 11中的listagg (同样,不幸的是,我正在查询的数据库上未启用wm_concat )。 我也对该数据库具有只读访问权限。

我当前的查询如下

    SELECT plan.EMPLID,
        plan.STRM TERM,
        CAST(COLLECT(plan.ACAD_PLAN) AS sys.dbms_debug_vc2coll) agg_plans
    FROM SYSADM.PS_OSR_PLAN_TRM plan
    WHERE plan.EMPLID = '999999999'
    GROUP BY plan.EMPLID, plan.STRM

这给了我这个结果:

EMPLID      TERM    AGG_PLANS
999999999   1152    SYS.DBMS_DEBUG_VC2COLL(VARCHAR(ECON-MN, TXTLCLO-MN))
999999999   1154    SYS.DBMS_DEBUG_VC2COLL(VARCHAR(ACCTING-BS, ECON-MN))

我相信我的逻辑是正确的,但是我在cast语句方面遇到了麻烦。 我知道sys.dbms_debug_vc2coll的类型table of varchar2(1000) 我想从每一行中删除SYS.DBMS_DEBUG_VC2COLL(VARCHAR(并仅列出结果。

有没有一种方法可以将结果集合连接成字符串? 此堆栈溢出后的帖子与我要查找的内容类似...但是,同样,我具有对该数据库的只读访问权限。 我也想尝试将其保留为一条select语句。

谢谢你的帮助。

编辑:我不反对使用xmlagg的解决方案。

您可以如下使用XMLAGG()

SELECT plan.emplid, plan.strm AS term
     , RTRIM( XMLAGG( XMLELEMENT(e, plan.acad_plan || ',') ORDER BY plan.acad_plan ).EXTRACT('//text()'), ',' ) AS agg_plans
  FROM sysadm.ps_osr_plan_trm plan
 WHERE plan.emplid = '999999999'
 GROUP BY plan.emplid, plan.strm;

注意, XMLELEMENT()的第一个参数可以是任何参数,它只是XML标记,其中plan.acad_plan || ','的值 plan.acad_plan || ','将被包装,最终将被丢弃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM