我正在使用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
。