ORA-00979不是具有复杂EXTRACTVALUE的GROUP BY表达式

时间:2015-09-28 13:29:22

标签: oracle xpath group-by

我正在尝试针对具有XMLTYPE列的表执行相当简单的Oracle查询:

Select POB_CODPOL, CODSIS From (
    Select T1.POB_CODPOL, EXTRACTVALUE(T1.POB_XMLPOL, '/Polbas/polfun[nomfun="filterBySystem"]/extpar[codele="codsis"]/valele/text()') CODSIS 
    From TDTX_POLITICA_CLOB T1
    Where T1.POB_CODEMP = '001840' 
)     
Group By POB_CODPOL, CODSIS

这引发了ORA-00979 Not a GROUP BY Expression,我真的不明白。 更糟糕的是:当我执行完全相同的查询时,但使用简化的XPATH查询确实工作:

Select POB_CODPOL, CODSIS From (
    Select T1.POB_CODPOL, EXTRACTVALUE(T1.POB_XMLPOL, 'Polbas/codpol/text()') CODSIS 
    From TDTX_POLITICA_CLOB T1
    Where T1.POB_CODEMP = '001840' 
)     
Group By POB_CODPOL, CODSIS

看起来Oracle在使用[nomfun="filterBySystem"]时不喜欢GROUP BY之类的条件(没有分组子句,一切正常)。

有关为何会发生这种情况的任何想法吗?

编辑:内部查询的结果非常简单:

enter image description here

2 个答案:

答案 0 :(得分:1)

EXTRACTVALUE已被弃用。

Oracle建议使用XMLQUERYXMLTABLE

这个应该有效:

WITH t as
    (SELECT T1.POB_CODPOL, x.CODSIS 
     FROM TDTX_POLITICA_CLOB T1 
          NATURAL JOIN XMLTABLE('/Polbas/polfun[nomfun="filterBySystem"]/extpar[codele="codsis"]/valele‌​' 
             PASSING POB_XMLPOL COLUMNS 
             CODSIS VARCHAR2(50) PATH '/') x
     Where T1.POB_CODEMP = '001840')
SELECT POB_CODPOL, CODSIS 
FROM t
GROUP BY POB_CODPOL, CODSIS;

答案 1 :(得分:1)

当表格式为二进制XML时,存在错误28588011:“ ORA-00979:不是按表达式分组”。

Severity    2 - Severe Loss of Service
Created 02-Sep-2018
Status  11 - Code/Hardware Bug (Response/Resolution)
WORKAROUND No

我想他们不会解决它。但是提示 NO_XML_QUERY_REWRITE (我也用于其他与XML相关的错误)也对我有用。