Oracle11g JOOQ DSL在LISTAGG()中围绕ORA-01489的工作方式

Oracle11g JOOQ DSL在LISTAGG()中围绕ORA-01489的工作方式,oracle11g,jooq,Oracle11g,Jooq,在Oracle SQL中,当生成的文本对于VARCHAR2来说太大时(错误消息:ORA-01489字符串concat的结果太大),可以使用XMLAGG而不是listag来解决此问题 SQL示例: 组内的LISTAGG(我的文本片段)(按片段编号排序) 变通办法 RTRIM(XMLAGG(xmlement(e,MY_TEXT_SNIPPET.))。按SNIPPET_NO提取(“//TEXT()”)顺序。GetClobVal(),,,) 如何使用JOOQ实现后者?一些XML函数从JOOQ 3.1

在Oracle SQL中,当生成的文本对于VARCHAR2来说太大时(错误消息:
ORA-01489字符串concat的结果太大
),可以使用XMLAGG而不是listag来解决此问题

SQL示例:

组内的LISTAGG(我的文本片段)(按片段编号排序) 变通办法

RTRIM(XMLAGG(xmlement(e,MY_TEXT_SNIPPET.))。按SNIPPET_NO提取(“//TEXT()”)顺序。GetClobVal(),,,)

如何使用JOOQ实现后者?

一些XML函数从JOOQ 3.14开始就受支持,包括:

但此表单中既不支持
EXTRACT()
也不支持
GetClobVal()
。您尝试使用并强制转换为
CLOB

或者,当不支持特定于供应商的功能时,您可以使用:

将jOOQ API与模板混合使用

publicstaticfieldlistaggworkaround(字段,字段orderBy){
返回rtrim(
字段(“{0}.GetClobVal()”,SQLDataType.CLOB,
xmlagg(字段(“{0}.extract(“//text()”)”),SQLDataType.XML,
xmlelement(“e”,字段,内联(“”)
)).orderBy(orderBy)
),
内联(“,”)
);
}
仅使用模板

publicstaticfieldlistaggworkaround(字段,字段orderBy){
返回场(
“rtrim(xmlagg(xmlement(e,{0},”)。按{1}提取('//text()'))顺序。GetClobVal(),',')”,
SQLDataType.CLOB,
字段,orderBy
);
}

从jOOQ 3.14开始支持一些XML函数,包括:

但此表单中既不支持
EXTRACT()
也不支持
GetClobVal()
。您尝试使用并强制转换为
CLOB

或者,当不支持特定于供应商的功能时,您可以使用:

将jOOQ API与模板混合使用

publicstaticfieldlistaggworkaround(字段,字段orderBy){
返回rtrim(
字段(“{0}.GetClobVal()”,SQLDataType.CLOB,
xmlagg(字段(“{0}.extract(“//text()”)”),SQLDataType.XML,
xmlelement(“e”,字段,内联(“”)
)).orderBy(orderBy)
),
内联(“,”)
);
}
仅使用模板

publicstaticfieldlistaggworkaround(字段,字段orderBy){
返回场(
“rtrim(xmlagg(xmlement(e,{0},”)。按{1}提取('//text()'))顺序。GetClobVal(),',')”,
SQLDataType.CLOB,
字段,orderBy
);
}