【问题标题】:Listagg in cursor in oracle 11goracle 11g中光标中的Listagg
【发布时间】:2016-03-09 16:23:30
【问题描述】:

我试图创建一个在其选择语句中使用 LISTAGG 的游标 fetch_table_info。

create or replace PROCEDURE testcheck is 
cursor fetch_table_info is       
select LISTAGG(B.COLUMN_NAME,'||'',''||')       
WITHIN GROUP (ORDER BY B.COLUMN_POSITION)       
from USER_IND_COLUMNS B       
where  B.TABLE_NAME=B.INDEX_NAME and b.TABLE_NAME='TEST_TAB'; 
begin 
dbms_output.put_line(SQLERRM); 
end; 
/

select 语句单独执行很好,但编译过程出现以下错误

发现 'LISTAGG',只有 CUME_DIST、DENSE_RANK、PERCENT_RANK、RANK、PERCENTILE_CONT 和 PERCENTILE_DISC 对 WITHIN GROUP 有效

提前非常感谢!

【问题讨论】:

    标签: oracle11g cursor listagg


    【解决方案1】:

    您使用的似乎是旧版本的 Toad,它无法识别 Oracle 11gR2 中引入的 listagg 函数。

    From the Dell support site:

    说明
    语法检查器无法识别 11gR2 新的解析函数 LISTAGG。

    ...

    上面的代码运行正常,但是如果我们尝试格式化它,就会出现以下错误消息:

    ERROR line 4, col 10, ending_line 4,ending_col 16, 找到 listagg,只有 CUME_DIST、DENSE_RANK、PERCENT_RANK、RANK、PERCENTILE_CONT 和 PERCENTILE_DISC 对 WITHIN GROUP 有效

    原因
    10.1版本的解析器不支持这个11gR2函数

    分辨率
    Toad for Oracle 11.0 及更高版本支持此功能。您可以使用http://bit.ly/noHL20下载最新版本的 Toad

    ...有趣地指向一个旧的 Quest URL,它只是重定向到戴尔支持登录页面。看来你可以get the current version here

    【讨论】:

    • 我正在使用 Oracle 11gR2 和 Toad for Oracle 9.7。如果我独立执行选择查询,它就可以正常工作。为什么它不能只在一个过程中工作?
    • 链接的支持说明也说了同样的话,有点像:“上面的代码运行正常,但如果我们尝试对其进行格式化,则会出现以下错误消息”。也许某些格式正在为 PL/SQL 自动完成,或者它们都通过一些通用的语法检查器,而这些检查器不会被单个简单的 SQL 语句命中。我不知道,你需要与戴尔接洽,但我想他们只会告诉你升级......
    • 我同意你的看法。谢谢你的帮助!!
    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多