我正在使用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
Run Code Online (Sandbox Code Playgroud)
但是,我一直收到错误,
SQL Error: ORA-01489: result of string concatenation is too long
Run Code Online (Sandbox Code Playgroud)
我很确定输出可能超过4000,因为这里提到的WEB_LINK是url stem和url查询的连接值.
有没有办法解决它还是有其他选择吗?
创建一个视图,其中一个字段(6个)是源表中两个字段的串联.创建了第二个视图,该视图使用listagg可能组合串联的结果.使用此两步操作正确返回源表中两个字段的listagg并置.
当我尝试创建一个既产生连接又产生listagg的视图时,我得到oracle错误ora-01489字符串连接的结果太长.
作为测试,我选择了max(长度(连接字段)并且返回了837.所以看起来错误是错误的.
所以它必须在语法中.我已经尝试过rtrim,trim甚至substr,但是无法获取view语句来编译listagg(连接)和返回数据.
我能够开发正确返回数据的两个视图表明我有基本语法,但是将连接与listagg函数结合起来的任务我还没弄清楚.
在另一种情况下,我能够在一个语句中将串联与listagg函数结合起来:
LISTAGG (STATEMENTS || ' - ' || BIRTH_DATE, '; ')
WITHIN GROUP (ORDER BY STATEMENTS || ' - ' || BIRTH_DATE)
AS GROWING_UP
Run Code Online (Sandbox Code Playgroud)
此语法正确返回所需的数据.........
但在上述情况下,类似的语法会产生Ora-01489错误.
知道有时Oracle错误可能会产生误导,我想知道是否有任何板载专家可能知道除了声明Oracle可能会抛出此错误之外的任何其他原因?
LISTAGG ((NUMBER || '-' || text), ',') WITHIN GROUP (ORDER BY (NUMBER || '-' || text))
AS
restrictions FROM source
Run Code Online (Sandbox Code Playgroud)
返回错误