Oracle SQL:如何在具有IDENTITY列的表上使用GROUP BY子句插入SELECT语句?

Hec*_*ros 5 sql database oracle

在一个应用程序中,我打算在Oracle 12c数据库上截断和插入,但是在IDENTITY列中发现了这个问题.尽管该INSERT... SELECT语句适用于SELECT我曾尝试过的大多数用法,但当该语句也有一个GROUP BY条款时,它无法工作,发出"ORA-00979:非GROUP BY表达式"投诉.下面是一些示例代码:

create table aux (
  owner_name varchar2(20),
pet varchar2(20) );

insert into aux values ('Scott', 'dog');
insert into aux values ('Mike', 'dog');
insert into aux values ('Mike', 'cat');
insert into aux values ('John', 'turtle');

create table T1 (
  id number generated always as identity,
  owner_name varchar2(20),
  pet_count number
);
insert into T1 (owner_name, pet_count) 
  select owner_name, count(*) as pet_count from aux group by owner_name;
select owner_name, count(*) as pet_count from aux group by owner_name;
Run Code Online (Sandbox Code Playgroud)

它适用于第一个插入,但在下一个插入时失败.

编辑:我已经更改了代码,因此问题更容易理解,同时仍然可以重现.

感谢帮助!

Hec*_*ros 5

在Oracle社区中,已经回答了这个问题。 https://community.oracle.com/message/13227544#13227544

insert into T1 (owner_name, pet_count)
with t as (select /*+ materialize */ owner_name, count(*) as pet_count from aux group by owner_name)
select owner_name, pet_count from t
Run Code Online (Sandbox Code Playgroud)

引用原始答案时,请注意没有记录具体化提示。感谢大家的帮助!