2012-12-10 27 views
0

以前我尝试过使用LISTAGG函数,但是因为有可能输出很长,甚至可能超过4000字节。字符串连接的结果太长的错误。我跟着蒂姆提到的关于implementation of a string aggregation function that returns a CLOB的AskTom页面。SQL错误:在预期的地方找不到ORA-00923:FROM关键字

  CREATE TABLE FINAL_LOG AS 
      SELECT SESSION_DT, C_IP, CS_USER_AGENT, 
      concat_all_ot(WEB_LINK, ' ') 
      WITHIN GROUP(ORDER BY C_IP, CS_USER_AGENT) AS "WEBLINKS" 
       FROM weblog_views 
       GROUP BY C_IP, CS_USER_AGENT, SESSION_DT 
       ORDER BY SESSION_DT 

为此,我得到以下错误,

SQL错误:ORA-00923:FROM关键字未找到预期

谁能告诉我在哪里,我这个问题呢?

+0

你不需要'WITHIN GROUP'子句。没关系,只有功能及其参数。 –

回答

5

如果您使用用户定义的聚合函数,则可能需要省略WITHIN GROUP子句。由于堆组织表中的数据本身无序,因此在CREATE TABLE语句中指定ORDER BY子句也没有意义。另外,如果您使用该链接中的代码,则聚合函数的名称是concat_allconcat_all_ot是对象类型。所以你想要像

CREATE TABLE FINAL_LOG AS 
    SELECT SESSION_DT, 
     C_IP, 
     CS_USER_AGENT, 
     concat_all(concat_expr(WEB_LINK, ' ')) AS "WEBLINKS" 
    FROM weblog_views  
    GROUP BY C_IP, 
      CS_USER_AGENT, 
      SESSION_DT 
+0

感谢您的回复,但我收到错误“不是GROUP BY表达式”。 – user1874311

+0

@ user1874311 - 我编辑了我的答案。您提供的链接上的聚合函数的名称是“concat_all”而不是“concat_all_ot”。 –

+0

我做了你的建议,我得到以下错误,SQL错误:ORA-06553:PLS-306:在调用'CONCAT_ALL'时参数错误的数量或类型 – user1874311

相关问题