【发布时间】:2020-05-21 20:40:05
【问题描述】:
我正在尝试对具有 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 在使用 GROUP BY 时不喜欢 [nomfun="filterBySystem"] 之类的条件(没有分组子句,一切正常)。
知道为什么会发生这种情况吗?
编辑:内部查询的结果相当简单:
【问题讨论】:
-
内部查询(没有分组依据)的结果是什么?
-
这是一个简单的三字符文本。我已经用更多信息更新了这个问题。谢谢!
-
将其转换为字符串时是否有效,例如
CAST(EXTRACTVALUE(T1.POB_XMLPOL, 'Polbas/codpol/text()') AS VARHCAR2(100) -
不,已经试过了。不适用于 CAST,也不适用于 TO_CHAR 之类的东西。
-
EXTRACTVALUE已弃用。与XMLTABLE一起使用是否更好,类似于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