Oracle 19c 中的 Group By 表达式

问题描述 投票:0回答:2

我正在Oracle 19c中安装数据库模式,安装脚本已在Oracle 12中重复使用,没有问题。

我对 19c 的问题是,当它运行我们的视图脚本时,它会在某些视图上引发异常。我们看到的错误不是按表达式分组。

我们有一些观点,例如我们有这样的观点:

SELECT name, TRUNC(date) as Day
FROM sometable
GROUP BY name, TRUNC(date)

它将错误指向选择,就好像它没有看到该字段已经在按表达式分组中一样。

如前所述,这些查询在 Oracle 12 中运行良好多年,直到现在迁移到 19 时我们才看到问题。

这是 19c 中的错误还是需要应用某些内容?

oracle12c oracle19c
2个回答
0
投票

19c,你说?无法重现。

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

您使用的表(这样您就不会说这是罪魁祸首)(显然,

date
是无效的列名;这是为
date
数据类型保留的)。

SQL> create table sometable as
  2    select 'Little' name, sysdate datum
  3    from dual
  4    connect by level <= 3;

Table created.

查询本身有效吗?是的:

SQL> select name, trunc(datum) as day
  2  from sometable
  3  group by name, trunc(datum);

NAME   DAY
------ --------
Little 26.01.22

请注意 - 由于您没有聚合任何内容 - 您可以使用

DISTINCT
而不是
GROUP BY
:

SQL> select DISTINCT name, trunc(datum) as day
  2  from sometable;

NAME   DAY
------ --------
Little 26.01.22

我可以创建视图吗?是的:

SQL> create view v_sometable as
  2  select name, trunc(datum) as day
  3  from sometable
  4  group by name, trunc(datum);

View created.

SQL>

正如我所说,我无法重现它。


请复制/粘贴您自己的 SQL*Plus 会话(就像我所做的那样),以便我们了解您所做的到底以及 Oracle 如何响应。


0
投票

sqlext.fn_xx(日期1,日期2)返回XX;

v1 为( 选择 sqlext.fn_xx(coalesce(trunc(A.date1),trunc(A.date2)),trunc(A.date3)) 作为日期 从A 按 sqlext.fn_xx 分组(合并(trunc(A.date1),trunc(A.date2)),trunc(A.date3))

) 从 v1 v1 中选择 v1.day

然后我得到 ERR ORA-00979: not a group by expression

© www.soinside.com 2019 - 2024. All rights reserved.