我正在使用Oracle SQL开发人员版本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 stem和url query的串联值。

有没有解决的办法,或者还有其他选择吗?

最佳答案

由于聚合字符串的长度可以超过4000个字节,因此不能使用LISTAGG函数。您可能会创建一个user-defined aggregate function来返回CLOB而不是VARCHAR2。有一个用户定义的聚合示例,该示例在首次讨论中Tim链接到的original askTom discussion中返回CLOB

07-28 07:25