暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 生成XML时的聚合问题

ASKTOM 2019-11-29
293

问题描述

大家好,

我正在尝试使用各种现有函数生成一些XML,例如XMLELEMENT,XMLAGG,...

但是我似乎无法完全生成我需要的东西。

我需要实现的是:


    
        
            ...
        
        ...
        
            XX
            ...
        
    
 ...
复制


因此,在GLEntry内部可以有多个GLEntry,在GLEntry内部可以有多个FinEntryLine,在PaymentTerm内部可以有多个paymentyline。

这是我到目前为止得到的:


  
    
    
      
    
  
  
    
    
      
    
  
复制


使用以下代码:

SELECT XMLSERIALIZE (
          CONTENT XMLELEMENT (
                        "GLEntries",
                        XMLAGG (
                           XMLELEMENT (
                              "GLEntry",
                              xmlattributes (TO_CHAR (fac_num) AS "entry",
                                             'E' AS "status"),
                              XMLCONCAT(XMLELEMENT ("FinEntryLine", xmlattributes(to_char(lfa_num) as "number")
                              )),
                              XMLELEMENT("PaymentTerms",
                                XMLELEMENT("PaymentTerm", xmlattributes(fac_num as "entry"))
                                ))))
          VERSION '1.0')
          AS xmlserialize_doc
  FROM fac,
       lfa
 WHERE lfa_fac_fk = fac_pk
 and fac_pk = 365462;
复制


我的问题是,支付条款元素重复为文件中存在的每个FinEntryLine。

我尝试了多个版本,使用不同的XMLAGG和XMLCONCAT,但找不到我需要的东西。

任何帮助和建议都将不胜感激。

谢谢,
aga

专家解答

没有样本数据很难确定。

但是我相信你需要xmlag FinEntryLines。按条目分组 (fac_num):

with rws as (
  select '00049' fac_num, 1 lfa_num
  from   dual 
  union all
  select '00049' fac_num, 2 lfa_num
  from   dual 
)
SELECT XMLSERIALIZE (
          CONTENT XMLELEMENT (
            "GLEntries",
               XMLELEMENT (
                 "GLEntry",
                 xmlattributes (
                   TO_CHAR (fac_num) AS "entry",
                   'E' AS "status"
                 ),
                 XMLAGG (
                   XMLELEMENT (
                     "FinEntryLine", 
                     xmlattributes(to_char(lfa_num) as "number")
                   )
                 ),
                 XMLELEMENT ( "PaymentTerms",
                   XMLELEMENT (
                     "PaymentTerm", 
                     xmlattributes(fac_num as "entry")
                   )
                 )
              )
          )
          VERSION '1.0'
        ) AS xmlserialize_doc
  FROM rws
  group  by fac_num;
  
XMLSERIALIZE_DOC                                                                                                                                                                                                                            


  
    
    
    
      
    
  
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论