与 GROUP BY 子句一起使用时,如何修复“ORA-00932:不一致的数据类型:预期 - 得到 CLOB”?

Posted

技术标签:

【中文标题】与 GROUP BY 子句一起使用时,如何修复“ORA-00932:不一致的数据类型:预期 - 得到 CLOB”?【英文标题】:How to fix 'ORA-00932: inconsistent datatypes: expected - got CLOB' when used with GROUP BY clause? 【发布时间】:2019-03-25 10:33:17 【问题描述】:

我正在为业务逻辑创建一个视图,其中包含来自多个表的大约 25 列。其中一个字段,比如“person_description”,有大约 10000 个字符,我不想截断这些字符。

为了简单起见,我将提供一个小样本(实际查询要大得多)。

create view sample_description as 
select person_description, name, employee_id
from employee_table 
group by person_description, name, employee_id;

我在person_description 字段上收到“ORA-00932:不一致的数据类型:预期 - 得到 CLOB”错误。

我对这个问题的理解是,GROUP BY 子句不适用于 clob 字段。我不想使用 SUBSTR 并截断该字段,因为按原样获取整个内容很重要。

我正在寻找任何解决方法或解决方案。 提前致谢。

【问题讨论】:

该查询无效。您通常 GROUP BY 与您 SELECT 相同的列,但那些作为设置函数的参数的列除外。 你想做什么? GROUP BY 一个 clob 列似乎有点奇怪。 How to make CLOB column in group by expression? Any work around?的可能重复 你为什么要首先按 person_description 分组? 您似乎过于简化了发布的代码。您需要发布一些内容来展示您尝试实施的业务规则以及重现您遇到的问题。如果您的代码对我们没有意义,我们将无法解释如何解决它。 【参考方案1】:

要坚持您的“示例”,您可以在分组后添加 clob 列。我假设employee_id 是您的主键。 HTH KR 彼得

create view sample_description as 
select
    (select e2.person_description from employee_table e2 where e2.employee_id = e.employee_id)
    , e.name, e.employee_id
from
    (select ei.name, ei.employee_id
    from employee_table ei
    group by ei.name, ei.employee_id) e;

【讨论】:

【参考方案2】:

尝试使用 to_char:

create view sample_description as 
select person_description, name, employee_id
from employee_table 
group by TO_CHAR(person_description), name, review_id;

仅在 clob

【讨论】:

如果 CLOB 大于 4000 个字符(varchar2 的限制)并且 OP 在他们的问题中明确指出 " person_description 大约有 10000 个字符,这将不起作用,这是我不想要的截断” 它仅在 clob 是的,你的帖子有它“明确指出”。但它仍然不是解决 OP 的实际问题的答案,即处理 CLOBS > 4000 个字符。

以上是关于与 GROUP BY 子句一起使用时,如何修复“ORA-00932:不一致的数据类型:预期 - 得到 CLOB”?的主要内容,如果未能解决你的问题,请参考以下文章

与 GROUP BY 子句一起使用的 MAX 函数

GROUP BY 和 ORDER BY一起使用时,要注意的问题!

SQL compute by 的使用 主要是针对与 GROUP BY 的区别

GROUP BY子句

GROUP BY子句

Laravel 分页不适用于 group by 子句