我正在使用Oracle SQL开发人员版本3.0.04。我试图使用该功能LISTAGG将数据分组在一起。
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函数。您可能会创建一个用户定义的集合函数,该函数返回CLOB而不是VARCHAR2。有一个用户定义的聚合示例,该示例CLOB在原始的AskTom讨论中返回Tim,Tim从该第一个讨论链接到该讨论。
CLOB
VARCHAR2