sql - LISTAGG函数: "result of string concatenation is too long"

标签 sql oracle

我正在使用 Oracle SQL Developer 版本 3.0.04。我尝试使用函数 LISTAGG 将数据分组在一起..

    CREATE TABLE FINAL_LOG AS
    SELECT SESSION_DT, C_IP, CS_USER_AGENT,
    listagg(WEB_LINK, ' ')
        WITHIN GROUP(ORDER BY C_IP, CS_USER_AGENT) "WEB_LINKS"
        FROM webviews
        GROUP BY C_IP, CS_USER_AGENT, SESSION_DT
        ORDER BY SESSION_DT

但是,我不断收到错误,

SQL Error: ORA-01489: result of string concatenation is too long

我非常确定输出可能会超过 4000,因为这里提到的 WEB_LINK 是 url 茎和 url 查询的串联值。

有什么办法可以绕过它或者有其他选择吗?

最佳答案

您可以使用 the XMLAGG function 完成类似的功能:

SELECT RTRIM(XMLAGG(XMLELEMENT(E,colname,',').EXTRACT('//text()') ORDER BY colname).GetClobVal(),',') AS LIST
FROM tablename;

这将返回一个 clob 值,因此行数没有限制。

关于sql - LISTAGG函数: "result of string concatenation is too long",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39020143/

相关文章:

SQL MAX 命令仍然返回多个结果

mysql - 超过 5 个表的 SQL 左连接

sql - 流水线函数上的 Oracle 查询工作正常,但如果我添加条件就会窒息

java - Oracle hibernate : Ordinal binding and Named binding cannot be combined

SQL*Plus 命令行参数在 Windows 中被覆盖

sql - parent 、子女、子子女 CTE

mysql - 当它引用的字段自动递增时,我如何有效地模仿外键约束?

sql - 我需要知道如何创建交叉表查询

sql - Sqoop从Oracle导入到HDFS:不再需要从套接字读取数据

SQL 根据与另一个表的连接更新表