加入收藏 | 设为首页 | 会员中心 | 我要投稿 51站长网 (https://www.51zhanzhang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
站内搜索:
当前位置: 首页 > 站长百科 > 正文

oracle – 带有DISTINCT子句的WM_CONCAT – 编译包与独立查询问

发布时间:2021-03-17 02:15:57 所属栏目:站长百科 来源:网络整理
导读:我正在编写一些使用WM_CONCAT函数的程序.当我运行此查询时: SELECT WM_CONCAT(DISTINCT employee_id)FROM employeeWHERE ROWNUM 20; 它工作正常.当我尝试在包函数或过程中编译相对相同的查询时,它会产生此错误:PL / SQL:ORA-30482:此函数不允许使用DISTI

我正在编写一些使用WM_CONCAT函数的程序.当我运行此查询时:

SELECT WM_CONCAT(DISTINCT employee_id)
FROM   employee
WHERE  ROWNUM < 20;

它工作正常.当我尝试在包函数或过程中编译相对相同的查询时,它会产生此错误:PL / SQL:ORA-30482:此函数不允许使用DISTINCT选项

FUNCTION fetch_raw_data_by_range
RETURN VARCHAR2 IS

    v_some_string VARCHAR2(32000);

BEGIN

    SELECT WM_CONCAT(DISTINCT employee_id)
    INTO   v_some_string
    FROM   employee
    WHERE  ROWNUM < 20;

    RETURN v_some_string;

END;

我意识到WM_CONCAT没有得到官方支持,但有人可以解释为什么它可以作为DISTINCT的独立查询工作,但不能在包中编译吗?

解决方法

问题是WM_CONCAT是写在pl / sql上的存储过程.

有一个开放的bug#9323679:PL / SQL使用DISTINCT FAILS ORA-30482调用用户定义的AGGREGRATE函数.

像这样的问题的解决方法是使用动态sql.

所以如果你把你的查询包装好

EXECUTE IMMEDIATE '<your_query>';

然后它应该工作.

但正如OldProgrammer已经建议的那样,你最好完全避免使用这个WM_CONCAT.

(编辑:ASP站长)

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

    相关内容
    未处理完善
      无相关信息
    未处理完善