使用LISTAGG,XMLAGG函数合并行,使用xmltable获取xmlType数据

select JIANGLIPUBLICSITUATION.get_area_name(o.area_no) as address,t.zh_title as zh_title,JIANGLIPUBLICSITUATION.get_main_person_info(t.prp_code) as main_person,t.main_org as main_org,extractvalue(pe.prp_xml, ''data/prp_extend/project_profile'') as project_profile,paper.paper_names as paper_names,patent.cnames as cnames,extractvalue(pe.prp_xml, ''data/proposal/extensionapplication'') as application_situation  from proposal t
                      left join proposal_extend pe on pe.prp_code=t.prp_code
                      left join
                      (SELECT prp_code,
                      LISTAGG(paper_name, '';'') WITHIN GROUP(ORDER BY paper_name) AS paper_names
                      FROM (select pe.prp_code as prp_code,t.* from proposal_extend pe,xmltable (''data/represent_papers/represent_paper'' passing pe.prp_xml columns paper_name varchar2(500) path ''paper_name'') t
                      )
                      GROUP BY prp_code) paper on t.prp_code=paper.prp_code
                      left join
                      (SELECT prp_code,
                      LISTAGG(cname, '';'') WITHIN GROUP(ORDER BY cname) AS cnames
                      FROM (select pe.prp_code as prp_code,t.* from proposal_extend pe,xmltable (''data/patents/patent'' passing pe.prp_xml columns cname varchar2(500) path ''cname'') t
                      )
                      GROUP BY prp_code) patent on t.prp_code=patent.prp_code
                      left join organization o on o.org_code=t.recommend_org_code
                      left join organization org on org.org_code=t.org_code
                      left join const_area c on c.area_no=o.area_no
                      left join person p on t.psn_code=p.psn_code
                      left join proposal_cached pc on t.pos_code=pc.pos_code
                      left join org_department od on t.dept_code=od.dept_code

                      where t.grant_code=30 and t.major_review_code is not null

如果listagg拼接字符串超过最大长度,可使用xmlagg处理

select xmlagg(xmlparse(content to_char(s.create_date,'yyyy-mm-dd hh24:mi:ss')||';' wellformed) order by s.create_date).getclobval()
from person s where s.log_type='login' and s.key_code=t1.psn_code

xmltable用法如下

select pe.prp_code as prp_code,t.* from proposal_extend pe,
      xmltable (
        'data/persons/person' passing pe.prp_xml columns
        ranking varchar2(50) path '@seq_no',
        cname varchar2(50) path 'cname',
        prof_title_name varchar2(50) path 'prof_title_name',
        org_name varchar2(100) path 'org_name',
        org_finish_name varchar2(100) path 'org_finish_name',
        work_result_one varchar2(1000) path 'work_result_one'
      ) t
where pe.prp_code=v_prp_code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值