【问题标题】:Convert LISTAGG to XMLAGG将 LISTAGG 转换为 XMLAGG
【发布时间】:2019-10-18 05:23:50
【问题描述】:

我有一个使用 LISTAGG 函数的查询,需要转换为 XMLAGG 以处理超过 4000 个字符的字符串连接:

 LISTAGG(NAME || INPUT || DESC || ' ' || '<cm>' || DATA || '</cm>', CHR(13)||CHR(10)) WITHIN GROUP(ORDER BY NAME) AS ENTRIES

我尝试以下方法:

REPLACE(
 REPLACE(
    XMLAGG(
       XMLELEMENT("A",NAME|| INPUT || DESC || ' ' || '<cm>' || DATA || '</cm>', CHR(13)||CHR(10) ORDER BY NAME).getClobaVal(),<A>',''),
   '</A>','[delimiter]') AS ENTRIES

ORDER BY 遇到的语法错误

【问题讨论】:

  • ORDER BY ' 之前缺少) => &lt;A&gt;','''

标签: oracle string-concatenation listagg xmlelement


【解决方案1】:

你错过了) 请尝试:

XMLAGG(
         XMLELEMENT ("X", FIELD_NAME|| INPUT || DESCRIPTION_KEY || ' ' || '<cm>' || MATCH_DATA || '</cm>', CHR(13)||CHR(10)) ORDER BY FIELD_NAME)

【讨论】:

  • 我尝试使用相同的 xmlagg。看看可以帮助你:EXTRACT (XMLAGG( XMLELEMENT ("X", FIELD_NAME|| INPUT || DESCRIPTION_KEY || ' ' || '' || MATCH_DATA || '', CHR(13)| |CHR(10)) ORDER BY FIELD_NAME) , 'X/text()').getstringval()
  • 修复了语法错误,但遇到运行时错误 ORA-00904: "SYS"."XMLTYPE"."GETCLOBAVAL": invalid identifier
  • 试试 XMLAGG( XMLELEMENT ("X", FIELD_NAME|| INPUT || DESCRIPTION_KEY || ' ' || '' || MATCH_DATA || '', CHR(13 )||CHR(10)) ORDER BY FIELD_NAME).extract('X/text()').getclobval()
  • 错字已修复,第二个 REPLACE 行的另一个错误(ORA-00938:函数参数不足
  • 试试这个 REPLACE( REPLACE( TO_CHAR(SUBSTR(XMLAGG( XMLELEMENT ("X", FIELD_NAME|| INPUT || DESCRIPTION_KEY || ' ' || '' || MATCH_DATA || ' ', CHR(13)||CHR(10)) ORDER BY FIELD_NAME).extract('X/text()').getClobVal(),1,4000)) ,'',' '), '','[分隔符])')
【解决方案2】:

你错过了“)”和“'

试试这个:

REPLACE(
 REPLACE(
    XMLAGG(
       XMLELEMENT("A",NAME|| INPUT || DESC || ' ' || '<cm>' || DATA || '</cm>', CHR(13)||CHR(10) ORDER BY NAME).getClobaVal()),'<A>',''),
   '</A>','[delimiter]') AS ENTRIES

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2021-06-04
    • 2019-03-03
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多