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*函数作为解决方法