Sql 需要LISTAGG选项方面的帮助吗
Sql 需要LISTAGG选项方面的帮助吗,sql,xml,string,oracle,listagg,Sql,Xml,String,Oracle,Listagg,LISTAGG有4000个字符的限制。有人能帮我回答这个噩梦般的问题吗 嗨,我在一个为应用程序提供信息的查询中有一段错误代码。在此表单中,查询没有实际条件。正因为如此,LISTAGG达到了4000个字符的限制 这里还有其他选择吗?基于所有东西是如何连接的,我没有看到一个简单的答案: SELECT email, first_name, last_name, LISTAGG( type_id ||','|| type_status
LISTAGG
有4000个字符的限制。有人能帮我回答这个噩梦般的问题吗
嗨,我在一个为应用程序提供信息的查询中有一段错误代码。在此表单中,查询没有实际条件。正因为如此,LISTAGG
达到了4000个字符的限制
这里还有其他选择吗?基于所有东西是如何连接的,我没有看到一个简单的答案:
SELECT
email,
first_name,
last_name,
LISTAGG(
type_id
||','|| type_status
||','|| filename
||','|| status_id
||','|| status_message
||','|| TO_CHAR(upload_date,'MM/DDYYYY')
||','|| broker
||','|| quarter
||','|| quarter_year
||':'
) WITHIN GROUP (ORDER BY upload_date DESC) filenames
FROM
(
SELECT
b.surrogate_key,
b.email,
b.type_id,
DECODE(a.file_type,NULL,0,1) type_status,
a.quarter,
a.quarter_year,
a.broker,
a.upload_date,
a.filename,
a.status_id,
b.first_name,
b.last_name,
a.status_message
FROM
(
SELECT DISTINCT
(editor || '~' || file_type) surrogate_key,
file_type,
quarter,
quarter_year,
broker,
filename,
upload_date,
status_id,
status_message
FROM upload_history
ORDER BY upload_date DESC
) a,
(
SELECT DISTINCT
(email||'~'||type_id) surrogate_key,
email,
type_id,
first_name,
last_name
FROM issuers
CROSS JOIN file_types
) b
WHERE
b.surrogate_key = a.surrogate_key(+)
)
GROUP BY
email,
first_name,
last_name,
type_id,
quarter,
quarter_year;
如中所述,解决
listag
的4000个字符限制的经典方法是使用
语法有点复杂。在您的用例中,您需要替换以下内容:
LISTAGG(
type_id
||','|| type_status
||','|| filename
||','|| status_id
||','|| status_message
||','|| TO_CHAR(upload_date,'MM/DDYYYY')
||','|| broker
||','|| quarter
||','|| quarter_year
||':'
) WITHIN GROUP (ORDER BY upload_date DESC) filenames
与:
REPLACE(REPLACE(
XMLAGG(XMLELEMENT("a",
type_id
||','|| type_status
||','|| filename
||','|| status_id
||','|| status_message
||','|| TO_CHAR(upload_date,'MM/DDYYYY')
||','|| broker
||','|| quarter
||','|| quarter_year
||':'
) ORDER BY upload_date DESC).getClobVal(),
'<a>', ''), '</a>', ',') filenames
REPLACE(替换(
XMLAGG(xmlement(“a”),
类型识别码
||“,”| |类型|状态
||“,”||文件名
||“,”| |状态| id
||“,”状态信息
||“,”| | TO_CHAR(上传日期,'MM/DDYYYY'))
||“,”经纪人
||“四分之一”
||“,”| |季度|年
||':'
)按上载日期说明订购)。getClobVal(),
'','','','')文件名
那么你真的想要一个大于4K的字符串的结果吗?这太棒了。我想知道这个XMLAGG&xmlement是如何工作的……我从未见过这个。它是不是比Listag更喜欢的方法?不一定是“首选”。XMLAGG等是数据库附带的XML开发工具包的一部分。它的主要功能是解析、处理和生成XML文档。上面的例子实际上是生成一个XML文档,然后我们去掉标记,只剩下连接的数据。所有的XML功能都在这里@LandonStatis:xmlement生成一个XML片段,XMLAGG聚合它们。除非达到4000个字符,否则我建议使用Listag,它主要用于聚合字符串,并切换到XML*函数作为解决方法