当前位置: 首页 > 面试题库 >

LISTAGG函数:``字符串连接的结果太长''

燕俊明
2023-03-14
问题内容

我正在使用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函数。您可能会创建一个用户定义的集合函数,该函数返回CLOB而不是VARCHAR2。有一个用户定义的聚合示例,该示例CLOB在原始的AskTom讨论中返回Tim,Tim从该第一个讨论链接到该讨论。



 类似资料:
  • 问题内容: 我正在尝试通过运行以下sql创建表视图 但我得到以下 ORA-01489:字符串连接的结果太长01489。00000-“字符串连接的结果太长” 原因:字符串连接的结果大于最大大小。操作:确保结果小于最大大小。 我抬起头,发现了使用to_clob的建议,但仍引发此错误。我正在使用oracle 11g。我在这里先向您的帮助表示感谢。 问题答案: LISTAGG中最长的串联字符串可以是400

  • 我正在开发一个程序,该程序将获取一个文本文件,并将数字从0-99转换为文字(即0)- 这里有几行输出(每一行都是不同的system.out行): 这是输入文件上的三行: 如您所见,数字随系统一起添加和打印。从函数convertToWord中退出,但一旦返回main,就会丢失。如何跨函数将这些转换附加到字符串?

  • 我有一个函数应用,定义如下 其中< code > let-test-this-in 和< code > let-test-this-out 是连接字符串为< code >“defaultendpointsprocol=”的存储帐户下现有存储队列的名称...;account name =…;AccountKey= ... "(直接从门户中的访问键-连接字符串复制而来)。我发布时生成的function

  • 问题内容: 我创建它使用GROUP_CONCAT来连接的结果从数据类型的产品列的查询视图在一个名为列。问题是mysql截断了concat_products列的值。phpMyAdmin表示concat_products列的数据类型为 餐桌产品: concat_products_vw查看: 根据mysql手册 VARCHAR列中的值是可变长度的字符串, 长度可以指定为MySQL 4.0.2之前的1到2

  • 问题内容: 为什么在这些情况下输出不同? ==> 印刷:2010年 ==> 打印:200 为什么第一个输出不是30?它与运算符优先级有关吗?就像首先将“ printing”和x连接在一起,然后将结果字符串和y连接在一起?我对么? 问题答案: 它的规则 我在下面显示从高到低的优先顺序: **如果运算符具有相同的优先级 ,* 则 此方法起作用 * 现在 :是字符串” :是Java中唯一将Number连

  • 问题内容: 为什么当我使用以下操作对字符求和时,它返回数字而不是字符?它不应该给出相同的结果吗? 下面的代码复制了字符: doubleChar(“ The”)→“ TThhee” 问题答案: 以下表达式的结果 是String连接的结果。Java语言规范说明 字符串串联的结果是对String对象的引用,该对象是两个操作数字符串的串联。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。 的